所以,我知道关系数据库中没有“最后一行”这样的东西,但我找不到更好的词来解释我想做什么。我有一个如下所示的表,其中id
是AUTO_INCREMENT
字段,time
是当前的Unix时间戳。请注意,我可以为不同的行设置相同的时间戳。
╔════╦════════════╦════════════╦═════════════╦════════════╗
║ id ║ field_1 ║ field_2 ║ field_n ║ time ║
╠════╬════════════╬════════════╬═════════════╬════════════╣
║ 1 ║ data_field ║ data_field ║ data_field ║ 1369748934 ║
║ 2 ║ data_field ║ data_field ║ data_field ║ 1369748935 ║
║ 3 ║ data_field ║ data_field ║ data_field ║ 1369748936 ║
║ 4 ║ data_field ║ data_field ║ data_field ║ 1369748936 ║
║ 5 ║ data_field ║ data_field ║ data_field ║ 1369748938 ║
║ 6 ║ data_field ║ data_field ║ data_field ║ 1369748939 ║
╚════╩════════════╩════════════╩═════════════╩════════════╝
我想要做的是一个从最高time
字段开始搜索的选择,因为我知道它从最低到最高排序我想让它在第一行不是我的{{{ 1}}子句,因为所有其他行也不匹配它。我认为MySQL所做的是搜索所有行但是因为我知道我的数据结构,并且我知道我想要的数据的位置,所以我不需要搜索整个表。此外,如果我使用WHERE
,我相信我的ORDER BY
子句的所有内容都将首先执行,所以我将要做的基本上是搜索整个行集,然后对其进行排序。一个重要的事情是我不知道为了使用WHERE
子句将检索多少行。
这是一个示例查询:
LIMIT
所以我希望从给定日期开始到现在为止所有结果。
非常感谢你的帮助。
答案 0 :(得分:2)
你要求的是一个索引。我建议你研究一下b-tree索引是如何工作的。
如果你在时间字段上有一个索引,那么引擎基本上可以满足你的要求 - 因为索引会被订购,它会“知道”它只需要找到你要求的最早点为之后返回所有内容。
答案 1 :(得分:2)
只需在时间戳字段上添加索引即可。 Mysql会为你处理它。
答案 2 :(得分:1)
我想要做的是从最高时间字段开始搜索的选择,因为我知道它从最低到最高排序我希望它在...时停止搜索...
我真的不认为你可以告诉MySQL在满足某个条件后停止查询。
事实上,我真的不认为你也应该关心。查询是数据库的工作,它做得很好。如果这是一个表演问题,你应该看到任何差异,直到许多世纪:)