一、背景
面试:设计一个类似朋友圈列表查询的接口
其中,对于分页刷新问题,回答的是limit
面试官又问:如果数据量很大怎么办?
二、limit
https://segmentfault.com/a/1190000008859706
limit M, N: 查询M之后的N的条数据,如果M,很小,则基本不考虑,如果M超过百万怎么办?
首先看下实际查询结果
其中create_time加了索引
EXPLAIN SELECT * FROM test ORDER BY create_time LIMIT 0, 10
EXPLAIN SELECT * FROM test ORDER BY create_time LIMIT 100000, 10
这个已经走了全表扫描了
二、优化
- 考虑先查出id,在利用in进行改进
EXPLAIN select * FROM test WHERE id in (SELECT sub.id FROM ( SELECT id FROM test ORDER BY create_time LIMIT 1000000, 10 ) as sub)
利用这种方式,性能有了一定的提升
- 引入第三方,如ES