Порядок выполнения ORDER BY и LIMIT в запросе MySQL - PullRequest
3 голосов
/ 13 октября 2010

У меня есть такой запрос, где я хочу отобразить отсортированные записи в разбивке на страницы.

Это мой запрос.

SELECT * FROM answers
WHERE userid = '10'
ORDER BY votes LIMIT 10, 20

Два аргумента LIMIT будут использоваться для постраничного отображения записей. Теперь моя проблема ORDER BY. Как MySQL выполняет этот запрос?

1-й способ

  • Выберите записи в соответствии с фильтрами
  • Сортировать их
  • Ограничить их

2-й способ

  • Выберите записи в соответствии с фильтрами
  • Ограничить их
  • Сортировать их

Если я думаю, как движок MySQL, я бы хотел реализовать 2-й, так как тогда мне пришлось бы сортировать меньшие записи?

Может кто-нибудь пролить свет на это?

Привет

Ответы [ 4 ]

3 голосов
/ 13 октября 2010

SQL LIMIT будет во всех базах данных всегда работать с результатом запроса, поэтому он будет выполнять запрос с ORDER BY , и этот результат будет ограничен.Это функциональное требование, база данных не нужна для его выполнения.

Таким образом, 1-й способ.

2 голосов
/ 13 октября 2010

Mysql следует по 1-му пути.

1 голос
/ 15 мая 2015

Если вы хотите 2-й способ, попробуйте использовать подзапрос с лимитом, а затем заказать.

Что-то вроде:

SELECT * FROM
(
  SELECT * FROM answers
  WHERE userid = '10'
  LIMIT 10
)
ORDER BY votes
0 голосов
/ 13 октября 2010

1-й способ, упомянутый в последних двух ответах. С точки зрения пользователя, второй способ в любом случае не будет очень полезным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...