在MySQL分页中抵消过大SQL优化经验共享
当我们显示一个内容列表时,它不可避免地会遇到分页问题,因为列表内容的数量可能很多,但是用户界面的大小可以看到是有限的,不能是一个接口来显示后端的所有内容,一旦过多的数据会对后端造成额外的压力。
在通常使用分页查询时,经常使用这种语句:
选择
*
从表
在状态= 0
和条件= 0
和条件则= 1
和情况而定= 1
订单编号
限制2000偏移量50000
当偏移量较大时,该语句的执行效率大大降低,效率随偏移量的增加而减小。
原因如下:
MySQL不跳过偏移行,而是接受偏移n行,然后在放弃之前返回到偏移行,并返回到n行。当偏移量很大,单个数据也很大时,我们需要查询的数据越多,速度就越慢。
优化方案:
选择
*
从表
加入
(从表中选择id)
在状态= 0
和条件= 0
和条件则= 1
和情况而定= 1
订单编号
限制2000偏移量50000)
作为TMP使用(id)
也许
从表A中选择,
(从表中选择id)
在状态= 0
和条件= 0
和条件则= 1
和情况而定= 1
订单编号
限制2000偏移量50000)b
在张=数据
首先,获取主键列表,然后通过主键查询目标数据。即使偏移量很大,也获得大量主键,而不是所有字段数据。
总结
以上就是本文的全部内容。希望本文的内容能给大家的学习或工作带来一定的帮助。如果有任何疑问,您可以留言交流,谢谢您的支持。