从某一行向后通过MySQL表记录SELECT的最快方法?

时间:2015-03-18 05:04:15

标签: mysql performance select

表格超过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中某一行之前选择一定数量记录的最快方法吗?

看起来还不错,但在选择30行之前,MySQL是否必须先按降序排序这1000万行?

我问这是因为我对这个查询不太确定。它似乎工作得足够快,但看着语法语义,我不太确定。

MySQL是否足够聪明,知道它不必订购所有这1000万行?

或者有没有更好的方法来实现这个目标?

1 个答案:

答案 0 :(得分:0)

如果id列上有索引(或将其作为主键的初始部分),则不必对所有行进行排序

只需使用该索引,给出已排序的数据,然后抓住前30个元素。

是的,如果它无法按排序顺序有效地检索行,则可能需要获取批次然后排序。但那将是相当糟糕的DBMS设计。