从某一行向后记录 SELECT 到 MySQL table 的最快方法?
Fastest way to SELECT through MySQL table records backwards from a certain row?
table 超过 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 秒
这是 SELECT 在 MySQL 中特定行之前的特定数量记录的最快方法吗?
看起来不错,但是 MySQL 不必先对这 1000 万行进行降序排序,然后再 SELECT-ing 30 行吗?
我问这个是因为我不太确定我提出的这个查询。它看起来确实有效并且速度足够快,但看看语法语义,我不太确定。
MySQL 是否足够聪明,知道它不必对所有 1000 万行进行排序?
或者有什么更好的方法可以做到这一点?
如果您在 id
列上有索引(或将其作为主索引的初始部分),则 根本不需要对行进行排序 键)。
它将简单地使用那个索引,给出已经排序的数据,并且只获取前三十个元素。
是的,如果它不能按排序顺序有效地检索行,它可能必须获取批次然后进行排序。但那将是相当糟糕的 DBMS 设计。
table 超过 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 秒
这是 SELECT 在 MySQL 中特定行之前的特定数量记录的最快方法吗?
看起来不错,但是 MySQL 不必先对这 1000 万行进行降序排序,然后再 SELECT-ing 30 行吗?
我问这个是因为我不太确定我提出的这个查询。它看起来确实有效并且速度足够快,但看看语法语义,我不太确定。
MySQL 是否足够聪明,知道它不必对所有 1000 万行进行排序?
或者有什么更好的方法可以做到这一点?
如果您在 id
列上有索引(或将其作为主索引的初始部分),则 根本不需要对行进行排序 键)。
它将简单地使用那个索引,给出已经排序的数据,并且只获取前三十个元素。
是的,如果它不能按排序顺序有效地检索行,它可能必须获取批次然后进行排序。但那将是相当糟糕的 DBMS 设计。