Mysql limit 分页机制和优化实例

男娘i 2021-09-12 01:52 603阅读 0赞

MySQL limit 操作常用于程序中的分页,但是如果你没有了解过limit的机制和相关优化原理,一旦数据量上升,程序的性能将会惨不忍睹,所以下面总结几种mysql关于limit优化实例,每个实例后对应都会有演示。(演示的数据来自15年暑期实习的p2p流量数据,表数据量约300W行)

1、sql中会范的错误

[sql] view plain copy

在CODE上查看代码片 派生到我的代码片

  1. select XXX from tableA limit 1000000,10;

上面 的语句是取1000000后面的10条记录,但是这样会导致mysql将1000000之前的所有数据全部扫描一次,大量浪费了时间。截图是我扫描100W数据花费的时间,大概是2S多

20160305172220514

这在程序中肯定是不可忍受的。

对于mysql,优化limit最重要的一点就是尽量先用主键id的索引到起始位置,然后再截取需要的行数。

2、优化方式

(1)使用记录主键的方式进行优化

  1. limit最大的问题在于要扫描前面不必要的数据,所以可以先对主键的条件做设定,然后记录住主键的位置再取行。

[sql] view plain copy

在CODE上查看代码片 派生到我的代码片

  1. select * from p2p_20131230 where main_id > 1000000 order by main_id limit 10;

这样执行的结果如下所示, 比没有优化前提升了很多倍。

20160305174326210

  1. 2)使用子查询进行查询:

[sql] view plain copy

在CODE上查看代码片 派生到我的代码片

  1. select * from p2p_20131230 where main_id >= (select main_id from p2p_20131230 limit 1000000,1) limit 10;

20160305175212001

  1. (3) 使用between关键字

如果在主键id是有序不变的情况下,还可以手动计算between的前后两个条件进行查询,这里我就不上代码了。

  1. 总结一下,上面的集中方法都是利用mysql的主键索引进行优化,当然应用中通常很难直接获得索引,基本上都是格局where后的某个条件,这个时候就可以先用条件查询出主键id,然后再用上述方式获取结果集即可。

发表评论

表情:
评论列表 (有 0 条评论,603人围观)

还没有评论,来说两句吧...

相关阅读

    相关 mysql查询limit

    前言 分布式,是程序员必备技能之一,在面试过程中属于必备类的,在工作中更是会经常用到。而Kafka是一个分布式的基于发布订阅的消息队列,目前它的魅力是无穷的,对于Kafk

    相关 440-MySQL(limit)

    分页查询limit语法 1、因为商品非常多,总是会分页显示,这样显示的话方便大家查看。 2、我在翻页的时候,查询的性能是均衡的。 limit语法 sele

    相关 MySQL Limit 优化

    在系统中需要进行分页的时候,我们通常会使用Limit加上偏移量的方法实现,问题来了,在偏移量非常大的时候,例如可能是limit 10000,10这样的查询,这时MySQL需要查