Mysql
2 SQL优化大全
2.1 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
2.2 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描
select id from t where num is null
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
select id from t where num=0
2.3 应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描
select id from t where num=10 or num=20 可以这样查询:
select id from t where num=10
union all
select id from t where num=20
2.4 应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描
2.5 在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致
2.6 尽量避免大事务操作,提高系统并发能力
2.7 当只要一行数据时使用 LIMIT 1
SELECT * FROM tb_city where name ='天津' limit 1
2.8 limit 优化
LIMIT n等价于Mysql LIMIT 0,n。MYSQL的优化是非常重要的。其他最常用也最需要优化的就是limit。mysql的limit给分页带来了极大的方便,但数据量一大的时候,limit的性能就急剧下降。同样是取10条数据
select * from tb_city limit 10000,10
和
select * from tb_city limit 0,10
优化后:
select * from tb_city Where id>=(
select id From tb_city limit 10000,1
)limit 10
2.9 count 优化
select count(*) from tb_city
优化后
select count(id) from tb_city