为避免慢SQL,写SQL时多注意以下几项:
1.Like 条件不以 % 开头
2.where 条件中 等式左侧不要出现函数(+ - * /)
3.where条件尽量使用索引列
4.用具体的字段代替 SELECT *
5.尽可能使用join来代替子查询
6.优化 limit 分页
例如:‘limit 1000,20’。
这时MySQL需要查询1020条记录然后只返回最后20条,前面的1000条都将被抛弃,这样的代价非常高。如果所有页面的访问频率都相同,那么这样的查询平均需要访问半个表的数据。
第一:在索引上分页
在索引上完成分页操作,最后根据主键关联回原表查询所需要的其他列的内容。
SELECT * FROM tb_user LIMIT 1000,10
可以优化成这样:
SELECT * FROM tb_user u
INNER JOIN (SELECT id FROM tb_user LIMIT 1000,10) AS b ON b.id=u.id
第二: 将limit转换成位置查询
这种思路需要加一个参数来辅助,标记分页的开始位置:
SELECT * FROM tb_user WHERE id > 1000 LIMIT 10