前言
使用mysql作为数据分页查询的时候我们一般使用limit,这样做在数据量不大的情况下是完全没问题的,当数据量达到几百万或者几千万的时候,使用limit速度将会非常的慢,比如在一张600万数据量的表中使用以下sql分页查询
SELECT * FROM TABLE WHERE IS_DELETE=0 LIMIT 5000000,20
也许你查前几页的时候是很快的,比如limit 0,20,但是当分到第几百万行的时候,越往后速度越慢,这是由于mysql的innoDB引擎使用的是B+Tree数据存储结构。
关于优化
有人可能说数据量上千万了为何不直接分表分库,而我个人觉得分表分库会增加查询的复杂性,能通过优化索引解决的问题还没有必要分表,除非数据量大到了索引无法解决问题的地步.
另外一个,一般很少有业务需求是直接把一张大数据量表的数据分页查询的,一般都是要带点条件,比如订单表那肯定是根据用户ID和删除状态去查,这种情况只需要建好索引即可。
开始优化
先来看看未优化前的SQL
select * from TEST_ORDER WHERE limit 10000000,10000010
从第一千万条开始,查10条数据,结果是执行时间12秒。
more >>

