У меня, например, 4000 строк, и я определяю предел X.
Запрос останавливается после того, как он найдет X строк? или запрос находит все строки, а затем берет X строк из найденных строк?
Спасибо.
У меня, например, 4000 строк, и я определяю предел X.
Запрос останавливается после того, как он найдет X строк? или запрос находит все строки, а затем берет X строк из найденных строк?
Спасибо.
Из Справочное руководство по MySQL:
Если вы используете LIMIT row_count с ORDER BY, MySQL заканчивает сортировку как вскоре, поскольку он нашел первые строки row_count отсортированного результата, а не сортировать весь результат. Если заказ выполняется с помощью index, это очень быстро. Если fileort необходимо сделать, все строки, которые соответствие запросу без предложения LIMIT должно быть выбрано, и большинство или все они должны быть отсортированы, прежде чем можно будет убедиться, что были найдены первые строки row_count. В любом случае, после найдены исходные строки, нет необходимости сортировать оставшиеся набора результатов, и MySQL этого не делает.
Таким образом, возможно, что весь набор результатов известен до применения LIMIT
. Но MySQL попробует все, что не может этого сделать. И вы можете помочь ему, предоставив полезные индексы, соответствующие вашим запросам.
EDIT: Кроме того, если набор не отсортирован, он завершает операцию SELECT
, как только он передает достаточное количество строк в результирующий набор.
SELECT * FROM your_table
LIMIT 0, 10
Это отобразит первые 10 результатов из базы данных.
SELECT * FROM your_table
LIMIT 5, 5
Здесь будут показаны записи 6, 7, 8, 9 и 10
Мне нравится говорить MySql;
Я хочу, чтобы вы начали отсчет с 5 + 1 или 6-й записи, но выберите только 5 записей
Я предполагаю, что вы думаете о MySQL, в котором согласно документации ответ зависит от этого. Если вы используете LIMIT
(без HAVING
), то:
LIMIT
, MySQL использует индексы
в некоторых случаях, когда обычно он предпочитает выполнять полное сканирование таблицы.SQL_CALC_FOUND_ROWS
.Есть несколько других случаев, о которых вы должны прочитать в документации.
Он останавливается после того, как он найдет количество строк, указанное в предложении LIMIT. Это можно проверить с большим объемом данных. Он извлекает результат за время, которое невозможно, если после этого он получает все строки таблицы и фильтрует.
Если вы используете MS SQL Server, вы можете записать его как указано ниже.
Select TOP [x]
*
From MyTable
Надеюсь, что это поможет.
Vamyip