从最后一行开始搜索mysql表

时间:2013-05-28 13:00:42

标签: mysql sorting optimization

所以,我知道关系数据库中没有“最后一行”这样的东西,但我找不到更好的词来解释我想做什么。我有一个如下所示的表,其中idAUTO_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

所以我希望从给定日期开始到现在为止所有结果。

非常感谢你的帮助。

3 个答案:

答案 0 :(得分:2)

你要求的是一个索引。我建议你研究一下b-tree索引是如何工作的。

如果你在时间字段上有一个索引,那么引擎基本上可以满足你的要求 - 因为索引会被订购,它会“知道”它只需要找到你要求的最早点为之后返回所有内容。

http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html

答案 1 :(得分:2)

只需在时间戳字段上添加索引即可。 Mysql会为你处理它。

答案 2 :(得分:1)

  

我想要做的是从最高时间字段开始搜索的选择,因为我知道它从最低到最高排序我希望它在...时停止搜索...

我真的不认为你可以告诉MySQL在满足某个条件后停止查询。

事实上,我真的不认为你也应该关心。查询是数据库的工作,它做得很好。如果这是一个表演问题,你应该看到任何差异,直到许多世纪:)