MySQL limit 分页查询优化(百万级优化)

1)简单的查询分页;分每页5条 limit [offset],[rows]

select t.* from t_topic t LIMIT 90000,10;

 

2)建立id索引;查询索引id

select * from t_topic where id>=(select id from t_topic order by id limit 90000,1) limit 10;

 

3)使用 between and 语句分页效率快N倍

SELECT * FROM t_topic WHERE id BETWEEN 90000 AND 90010;  

 

4)分表存储;30万条记录的id存存储到单独的一个索引表t里面;先查找索引表t里面的id索引;然后再查询

5)使用复合索引查询数据

如果对于有where 条件,又想走索引用limit的,必须设计一个索引,将where 放第一位,limit用到的主键放第2位,而且只能select 主键!
完美解决了分页问题了。可以快速返回id就有希望优化limit , 按这样的逻辑,百万级的limit 应该在0.0x秒就可以分完。

看来mysql 语句的优化和索引时非常重要的!

#先查询索引id
select
id from t_topic limit 90000,10;
#然后在in()里面包含该id
SELECT * FROM t_topic WHERE id in (90001,90002,90003,90004,90005,90006,90007,90008,90009,90010);

通过简单的变换,其实思路很简单;通过优化索引,找出id,并拼成 “90001,90002,90003,90004,90005,90006,90007,90008,90009,90010″ 这样的字符串;

查询效率在百万级别的数据不成问题。  

附图:

 

posted @ 2018-04-23 15:32  王默默  阅读(11539)  评论(0编辑  收藏  举报