如何将分页SQL做到更优化,让MySQL执行的更快的方法。
一般的情况下,我们的分页SQL语句是这样的:
SELECT * FROM table ORDER BY id LIMIT 1000,10;
以上SQL语句在原理上和在实际操作中是不会存在什么问题,但是当table表的数据量达到几十万以上的时候,上面的语句执行一遍,可能会要执行个十几秒的时间,并且当页数越靠后的话,执行的时间会越长,这个时候我们就需要找到一种更快的查询办法来替代这种操作了。
网上已经有很多优化的方法,基本都是这样的:
SELECT * FROM table WHERE id >= (SELECT id FROM table LIMIT 1000000, 1) LIMIT 10;
以上SQL语句是一个不错的解决方法,分页查询的速度基本会保持在1秒之内,但据经验总结得出还有一种更好的办法,如下:
SELECT * FROM table WHERE id BETWEEN 1000000 AND 1000010;
相比以上的解决办法,在速度上还会快了不少。
另外分享两个关于查询的技巧:
(1)如果需要查询 id 不是连续的一段,最佳的做法就是先找出 id ,然后用 in 查询:
SELECT * FROM table WHERE id IN(10000, 100000, 1000000…);
(2)当查询字段一较长字符串的时候,表设计时要为该字段多加一个字段,如存储网址的字段,在需要查询该字段的时候,不要直接查询字符串,效率低下,应该查诡该字串的crc32或md5值。