【发布时间】:2018-08-08 00:35:34
【问题描述】:
假设您有一个包含 n 行的表,那么在不排序的情况下获取该表上记录的第一行的最有效方法是什么?
这保证有效,但随着记录数量的增加会变慢:
SELECT * FROM posts ORDER BY created_at DESC LIMIT 1;
更新:
如果有多个记录具有相同的created_at 值,这会更好,但仍需要排序:
SELECT * FROM posts ORDER BY id ASC LIMIT 1;
想象一个有 100 万页和 10 亿行记录的分类帐簿,要获得有史以来的第一个记录,您只需翻到第一页并获得最上面的那个,对吗?无论分类帐的大小如何,您都应该以相同的效率获得第一个记录。我希望我可以在 MySQL 中做同样的事情,而无需进行任何排序或排序。出于研究目的。我的意思是,为什么不呢?为什么不能 MySQL?设计上不可能吗?
这在编程中的典型数组结构中是可能的:
array = [1,2,3,4,5]
第一个元素在array[0],第二个在array[1],以此类推。不需要排序。最后一个元素是array[array_count(array)-1]。
【问题讨论】:
-
这可能是最快、最简单的方法。附带问题:如果两条记录具有相同的时间戳,您希望发生什么?
-
您可以使用带有
MAX()的子查询,但这也会涉及类似于排序的过程。 -
使用自增主键,选择id = 1,因为主键是索引的,所以不必对整个表进行排序
-
@Tim Biegeleisen 如果您在列上创建索引,该问题将得到解决
-
这是记录的最后一行。