PS:根据自己平时写代码实际测试得出的一些小技巧,不敢保证对所有语句都有效,自己觉得还不错,哈哈哈,后续发现其他的技巧也会继续补充的。如果有不对的地方欢迎大家指出来,一起讨论学习。
一、查询条件优化
1.能筛选的数据约多的条件放越前面。
如考虑下面的查询:
select * from student where school_id=12 and student_id=1001
如果这个表非常大,那么改写成下面这样速度回更快:
select * from student where student_id=1001 and school_id=12
2. 查询速度越快的条件放越前面。
如考虑下面的查询:
select * from student where student_name like '%刘%' and school_id=12 and sex=0
如果这个表非常大,那么改写成下面这样速度回更快:
select * from student where school_id=12 and sex=0 and student_name like '%刘%'
二、Limit查询优化
1.优化LIMIT查询使用延迟关联查询
让mysql扫描尽可能少的页面,获取需要访问的记录后再根据关联列回原表查询需要的所有列。如考虑下面的查询:
select * from student where student_name like '%刘%' and sex=0 order by age desc limit 1000,10
如果这个表非常大,那么改写成下面这样速度会更快:
select * from student
INNER JOIN (
SELECT id FROM student
WHERE student_name like '%刘%' and sex=0
order by age desc
limit 1000,10
) AS lim USING (id)
2.如果某字段有索引,可预先计算边界值,再进行查询。
如考虑下面的查询:
select * from student where student_name like '%刘%' and sex=0 order by age desc limit 1000,10
如果id有索引,同时知道id的边界值到该在1000-2000范围,那么改写成下面这样速度会更快:
select * from student
where student_name like '%刘%' and sex=0 and id between 1000 and 2000
order by age desc limit 1000,10
网友评论