偏差限制("LIMIT 500000,10")即使在指数后仍然很慢?

Seb*_*wak 3 mysql indexing performance limit

我有一张带有int田地的桌子,让我们称之为createTime.该表包含数百万条记录.现在我想运行查询:

select * from `table` order by `createTime` desc limit 500000, 10
Run Code Online (Sandbox Code Playgroud)

我已经创建了一个索引createTime,但查询运行缓慢.什么原因?我怎样才能改进它?

这是EXPLAIN所说的:

id 1
select_type simple
table table
type index
possible_keys null
key createTime
key_len 4
ref null
rows 500010
extra
Run Code Online (Sandbox Code Playgroud)

至于偏移量,当它很小时它的工作速度要快得多.

Lig*_*ica 9

一般规则:避免OFFSET使用大表.

[A]偏移量增加,查询执行所需的时间逐渐增加,这可能意味着处理非常大的表将花费很长时间.原因是因为offset对表中没有索引的行的物理位置起作用.因此,要在偏移量x处找到行,数据库引擎必须遍历从0到x的所有行.

一般的经验法则是"绝不使用限制条款中的偏移量".对于小型表,您可能不会注意到任何差异,但对于超过一百万行的表,您将看到巨大的性能提升.

  • 我宁愿*"避免大量偏移"* (2认同)