要获取最后10条记录,在mysql查询中添加“limit”会更快吗?

v440hwme  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(1860)

有人能解释一下,如果我想获取最后10条记录,在mysql查询中添加“limit”会让它更快吗?喜欢

SELECT 
    *
FROM
    `table`
ORDER BY id DESC
LIMIT 50;

有没有其他方法来获取最后10条记录,还是更快?

svmlkihl

svmlkihl1#

增加限制会使它更快。没错。在这种情况下,将选择插入数据库的最后10条记录

lg40wkob

lg40wkob2#

可以使用派生表代替限制 IN 或者 subquery 然后是一个动态的 rownum 变量。但这可能是非常复杂和缓慢的选择。
因此,我建议您使用相同的查询从表中获取最后一行,而不是使用任何其他替代方法。因为如果您想使用子查询,那么您必须跟踪max id数据,并且可能一些数据被删除或删除,那么它将无法返回适当数量的记录。你也可以用 col name 而不是 * 以获得更多优化。

x8goxv8g

x8goxv8g3#

问题在于 limit 它必须在只返回最后50行之前对表中的所有行进行排序,因此它总是很慢,并且会随着表的增长而变慢(不可伸缩)。
获得最后50名的最快方法是:

SELECT 
  *
FROM
  `table`
WHERE id > (SELECT MAX(id) FROM `table`) - 50

这将使用上的索引 id 获得最大id,再次获得前50名。
您还应该尝试更复杂但可能更好优化的方法:

SELECT 
  *
FROM
  `table`
WHERE id BETWEEN (SELECT MAX(id) FROM `table`) - 49
    AND (SELECT MAX(id) FROM `table`)

比较实际运行时间,找出最快的运行时间。

相关问题