Порядок сортировки / ограничения по простому запросу БД - PullRequest
1 голос
/ 26 января 2012

Мне интересно, как будет работать запрос, подобный следующему ....

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

Мой вопрос, применяется ли ограничение:

  1. После сортировки записей, в этом случае я определенно получу последнюю запись до 2000 года. Или ...

  2. До сортировки записей, и в этом случае одна записьбудет выбран из естественного порядка, а затем не отсортирован вообще (так как есть только одна запись).

Это кажется несколько очевидным, но документация Amazons, кажется, не охватывает это.

1 Ответ

1 голос
/ 26 января 2012

Это кажется несколько очевидным, но документация Amazons, похоже, не прикрой это.

Да, ответ определенно 1), в противном случае предложение limit вообще не будет полезным для любых сценариев реального мира (см. Ниже); кроме того, это серьезно нарушило бы принцип наименьшего удивления , поскольку синтаксис Amazon SimpleDB смоделирован после SQL, который в этом отношении работает должным образом, см., например, предложение LIMIT в PostgreSQL :

При использовании LIMIT рекомендуется использовать предложение ORDER BY, которое ограничивает результирующие строки в уникальном порядке. В противном случае вы получите непредсказуемое подмножество строк запроса - [...].

Например, в противном случае SimpleDB не разрешит правильную нумерацию страниц, которая действительно организована с помощью limit (подробности см. В ответе Mocky о Как выполнить разбиение по страницам с simpledb? ) то есть вы получите следующий токен , если будет больше результатов, которые не дадут правильно отсортированные страницы, если limit не будет подчиняться order by.

Соответственно, чтобы, наконец, привести некоторые аргументы, выведенные из документации Amazon, Count также указывает на ожидаемое поведение:

Следующий токен, возвращаемый count (*) и select, взаимозаменяемы как До тех пор, пока предложения и порядок по пунктам совпадают.

...