分页场景(limit,offset)为什么会慢?
五年前在tx的时候,发现分页场景下,mysql请求速度非常慢。数据量只
有10w的情况下,select xx from
单机大概2,3秒。我就问我导师为什么,他反问“索引场景,mysql中获
得第n大的数,时间复杂度是多少?”
答案的追寻
确认场景
假设status上面有索引。select * from table where status = xx
limit 10 offset 10000。会非常慢。数据量不大的情况就有几秒延迟。
小白作答
瞎猜了个log(N),心想找一个节点不就是log(N)。自然而然,导师让我
自己去研究。
这一阶段,用了10分钟。
继续解答
仔细分析一下,会发现通过索引去找很别扭。因为你不知道前100个数在
左子树和右子数的分布情况,所以其是无法利用二叉树的查找特性。通过
学习,了解到mysql的索引是b+树。