MySQL性能优化的几万个几万级数据分页查询
实验
1。直接使用限位开始、计数分页语句:
从订单限制开始,计数
当起始页很小时,查询中没有性能问题。让我们看一下从10100100010000开始的分页执行时间(每页20页)。
从订单限制10,200.016秒中选择*
从订单限制100,200.016秒中选择*
从订单限制1000,200.047秒中选择*
从订单限制10000,200.094秒中选择*
我们已经看到,随着最初记录的增加,时间也在增加。这表明分页语句限制与初始页码有很大关系。然后我们改变初始记录40W。
从订单限制400000,203.229秒中选择*
看看我们最后一页的时间。
从订单限制800000,2037.44秒中选择*
很明显,这一次是无法忍受的。
我们还可以从中总结两件事:
1)限制语句的查询时间与起始记录的位置成比例。
2)MySQL的限制语句非常方便,但是已经记录的许多表不适合直接使用。
2。限制寻呼问题的性能优化方法
利用表的覆盖索引加速分页查询
我们都知道,如果索引列中包含索引列,那么这种情况将很快被查询。
因为我们使用索引来寻找优化算法,而数据是查询索引,不需要再找到相关的数据地址。另外,MySQL中有一个相关的索引缓存,在高并发性下缓存更好。
在我们的示例中,我们知道id字段是主键,并且自然包含默认主键索引:
这一次,我们查询最后一页的数据(使用覆盖索引,只有id列),如下所示:
从订单限制800000,200.2秒中选择id
与所有栏目的37.44秒相比,速度提高了100倍以上。
因此,如果我们必须查询所有的列,有两种方法,一种是id > =的形式,另一种是使用连接来查看实际情况:
从id(=从订单限制800000, 1中选择ID)的订单中选择* 20
查询时间为0.2秒。这是一次质的飞跃。哈哈
写作的另一种方式
从订单联接中选择*(从订单限制800000, 20中选择id)B
查询时间非常短。