大家来聊聊工作中遇到的sql优化案例吧^o^
Opened this issue · 3 comments
caizhigang97 commented
对一个大数据量的表使用limit做分页。越往后分页,LIMIT语句的偏移量就会越大,速度也会明显变慢。如下:
SELECT * FROM big_table WHERE name = 123 ORDER BY id LIMIT 10000, 20
此时,我们可以通过子查询的方式来提高分页效率:
SELECT * FROM big_table WHERE id >= (SELECT id FROM big_table WHERE name = 123 ORDER BY id LIMIT 10000, 1) LIMIT 10
原因: limit10000,20的意思扫描满足条件的10020行,扔掉前面的10000行,返回最后的20行,问题就在这里。例如 LIMIT 500000 , 30 扫描了50万行,肯定会慢。所以采用上面的方式可以有效解决这个问题。
注:这里的is是已经索引过的。
欢迎各位兄弟姐妹积极留言呀。
gordonCN commented
is? or id?
gordonCN commented
另:子查询中仍旧使用limit 1000, 性能会有所提升吗?
Locker1995 commented
有人教过我,单条数据查询 select * from table a where a.xx=xxx 后面加上limit 1
查询速度会快很多