数据库优化
优化sql
A:将一个Select语句的结果作为子集,然后从该子集中再进行查询
B:使用“临时表”暂存中间结果
避免程序中多次扫描主表,减少程序执行“共享锁”阻塞“更新锁”,提高并发
减少数据库的访问使用索引
A:使用索引的条件
1,一个经常查询的字段 大于,小于,或者 in(),模糊查询
2,主键和外键一般需要索引
3,sql 执行查询的频率非常高
B: 批量操作数据
C: 用存储过程和存储函数
D:创建索引
普通索引:normal
CREATE INDEX index_name ON table_name (column_list);
唯一索引:
这个表中的数据不能重复我们捕获这个全局异常给出相应提示
CREATE UNIQUE INDEX index_name ON table_name (column_list)
主键索引:
not null
全文索引
不建议使用%前缀模糊查询
like "%name" 或者 like "%name%" 这种查询会导致索引失效全表扫描。但是可以使用 like "name%"
E:exist 代替 in , 用union all 取代 or
in数据底层按数组进行排序了不应过多,如果限制条件中其他字段么有索引尽量少用or 使用 union all 或者 union
in和 exists 主要造成驱动顺序的改变,exists 外表为驱动表,先被访问,适用于外表小内表大的情况,in反之。
in 是在内存中遍历比较,exist(?ɡ'z?st) 需要查询数据库,数据量比较大时,exists效率优于in.
not in 和 not exists 推荐使用第二
F: select 语句务必指明字段名称
G: 一般外链接的查询效率大于子查询
H: 尽可能使用更小的字段。越小的数据类型占用的空间越小
I : 避免where 子句中对字段进行null 判断
null 判断导致引擎放弃索引,进行全表扫描
按时间统计 按月/日统计登录次数
按时间统计 按月/日统计登录次数
SELECT * FROM (SELECT DATE(last_login) lastlogin,
count(last_login) as count
FROM tb_government_user
where last_login is not NULL
GROUP BY DATE( last_login)
)tb_government_user
J:批量操作数据
批量提交数据减少与服务器的交互次数
INSERT INTO score (change_type,score,user_id) VALUES ('吃饭',10,1),('喝茶',10,1),('喝茶',10,1);
Update score
SET change_type = CASE id
WHEN 1 THEN 'value1'
WHEN 2 THEN 'value2'
WHEN 3 THEN 'value3'
END
WHERE id IN (1,2,3)
能用 between 就不要用 in 了因为in 会进行全表扫描
J:存储过程和存储函数的优化
将那些不会变的业务封装 可以减少网络交互的成本
存储过程和存储函数都是存储在服务器端的SQL语句的集合
https://www.jianshu.com/p/c59df5d8a798 //简书文章
A: 存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译 而sql 语句每次执行都必须编译
B: 如果当对数据库进行复杂操作时(如对多个表进行Update,Insert) 可将此复杂操作用存储过程封装起来与
数据库提供的事务处理结合一起使用
C: 存储过程可以重复
create procedure 存储过程名字([parameter])
[characteristics]
[ WITH
{ RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]
[ FOR REPLICATION ]
AS sql_statement [ ...n ]
begin
MySQL 语句;
end;
---------------
[parameter]:
[IN|OUT|INOUT] param_name type
-----------
characteristic:
LANGUAGE SQL : 用来说明语句部分是SQL语句
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } : 子程序不包含读写
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'
routine_body:
Valid SQL procedure statement or statements
下一篇: 大数据、云计算将成信息安全挑战重点