简单数据库查询的排序/限制顺序

时间:2012-01-25 22:42:58

标签: nosql amazon-web-services amazon-simpledb

我想知道如下查询将如何运作....

select * from survey where Year < '2000' order by Year desc limit 1

我的问题是,限制是否适用:

  1. 在对记录进行排序后,在这种情况下,我肯定会在2000年之前获得最后一条记录。或者......

  2. 在对记录进行排序之前,在这种情况下,将从自然顺序中选择一条记录。然后根本没有排序(因为只有一个记录)。

  3. 这似乎有些明显,但亚马逊的文档似乎并没有涵盖它。

1 个答案:

答案 0 :(得分:1)

  

这似乎有些明显,但亚马逊的文档似乎并不存在   覆盖它。

哟,答案肯定是1),否则limit条款对任何真实场景都没有用(见下文);此外,它会严重违反Principle of least suprise,因为Amazon SimpleDB语法是在SQL之后建模的,在这方面可以正常工作,例如, LIMIT clause in PostgreSQL

  

使用LIMIT时,最好使用ORDER BY子句   将结果行限制为唯一的顺序。否则你会得到   查询行的不可预测的子集 - [...]。

例如,否则 SimpleDB 将不允许正确的分页,这通过limit精心编排(有关How to do paging with simpledb?的详细信息,请参阅Mocky的答案),即你将会如果limit不遵守order by,则会收到下一个令牌,以防有更多结果,这将无法正确排序页面。

因此,为了最终提供从亚马逊的文档中推断出的一些推理,Count也暗示了预期的行为:

  

count(*)和select返回的下一个标记可互换为   只要where和order by子句匹配。