所以,我知道关系数据库上不存在“最后一行”这样的东西,但我找不到更好的词来解释我想要做什么。我有一个如下所示的表,其中id
is an 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
字段,因为我知道它是从最低到最高排序的,所以我希望它在第一行不符合我的要求时停止搜索WHERE
子句,因为所有其他行也不会匹配它。我认为MySQL所做的是搜索所有行但由于我知道我的数据结构并且我知道我想要的数据的位置,所以我不需要搜索整个表。另外如果我使用ORDER BY
,我相信我的所有内容WHERE
子句将首先执行,所以我要做的基本上是搜索整个行集,然后对其进行排序。一件重要的事情是我不知道要检索多少行才能使用LIMIT
clause.
这是一个示例查询:
SELECT fields FROM table WHERE time > timestamp
所以我想获得从给定日期开始到现在的所有结果。
非常感谢您的帮助。
你要求的是一个索引。我建议您研究一下 B 树索引的工作原理。
如果您在时间字段上有索引,引擎基本上会执行您所要求的操作 - 因为索引将被排序,它会“知道”它只需要找到您要求的最早点并返回之后的一切。
http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)