mysql单表百万数据记录分页性能优化

来源:互联网 发布:淘宝司法拍卖网首页 编辑:程序博客网 时间:2024/06/02 04:09
http://blog.csdn.net/kirsten_z/article/details/77097904

说明
1)问题:单个数据表含有百万条记录,造成访问时很慢,分页数大时更慢
2)解决:主要使用limit来分页,针对limit分页问题性能优化
示例
1、测试示例
sql语句: select * from product limit start, count
当起始页较小时,查询没有性能问题,分别看下从10, 100, 1000, 10000开始分页的执行时间(每页取20条)
select * from product limit 10, 20 0.016秒
select * from product limit 100, 20 0.016秒
select * from product limit 1000, 20 0.047秒
select * from product limit 10000, 20 0.094秒
取最后一页记录的时间
select * from product limit 866613, 20 37.44秒
从各分页执行时间,总结出两件事情:
1)limit语句的查询时间与起始记录的位置成正比
2)mysql的limit语句是很方便,但是对记录很多的表并不适合直接使用。
2、limit分页优化
利用表的覆盖索引加速分页查询,利用索引查询的语句中如果只包含索引列(覆盖索引),会查询很快
在例子中,id字段为主键,包含了默认的主键索引
利用覆盖索引,只包含id列,查询最后一页的数据
select id from product limit 866613, 20 0.2秒
相对于查询所有页的37.44秒,提升了100多倍的速度
若要查询所有列,有两种方法:
1)id>=形式
SELECT * FROM product WHERE ID > =(select id from product limit 866613, 1) limit 20
查询时间为0.2秒
2)利用join
SELECT * FROM product a JOIN (select id from product limit 866613, 20) b ON a.ID = b.id
原文链接:http://www.cnblogs.com/lyroge/p/3837886.html
原创粉丝点击