【发布时间】:2015-03-18 05:04:14
【问题描述】:
拥有超过 1800 万行的表:
SELECT * FROM tbl WHERE id > 10000000 LIMIT 30
耗时 0.0724 秒。
SELECT * FROM tbl WHERE id < 10000000 ORDER BY id DESC LIMIT 30
耗时 0.0565 秒。
这是在 MySQL 中某一行之前选择一定数量记录的最快方法吗?
这似乎已经足够好了,但 MySQL 不是必须先按降序排列这 1000 万行,然后再选择 30 行吗?
我问这是因为我不太确定我提出的这个问题。它看起来确实有效且速度足够快,但看看语法语义,我不太确定。
MySQL 是否足够智能,可以知道它不必对所有这 1000 万行进行排序?
或者有没有更好的方法来实现这一点?
【问题讨论】:
-
如果您不关心某个 id 之前的哪 30 行使用没有 ORDER BY 的变体,它应该更快..除了如果那是主键,行已经排序,所以在第二个查询中您可能进行范围扫描。我不确定。在这些查询之前添加一个 EXPLAIN 并使用结果编辑您的问题。
标签: mysql performance select