Недавно я узнал, что MySQL имеет offset
функцию. Я пытался найти документацию о результатах смещения или разнице между смещением и вариантом предела, но я не могу найти то, что я ищу.
Допустим, у меня есть 10.000 строк в таблице, и я хочу 25 результатов из строки 1.000. Насколько я дошел, я мог сделать оба, чтобы получить тот же результат:
SELECT id,name,description FROM tablename LIMIT 1000,25
SELECT id,name,description FROM tablename LIMIT 25 OFFSET 1000
Что я хотел бы знать, так это разницу между ними.
- Это действительно делает то же самое или мое понимание неверно?
- Один медленнее / быстрее в больших таблицах
- Изменяется ли результат смещения, когда я делаю
WHERE column=1
(скажем, столбец имеет> 100 различных значений) - Меняется ли результат смещения, когда я делаю
ORDER BY column ASC
(если он имеет случайные значения)
Если это «глупый» вопрос и кто-то знает какую-либо документацию, освещающую эту тему, пожалуйста, добавьте их в ответы.
Я чувствую, что смещение пропускает первые X строк, найденных в базе данных, без учета сортировки и где.
Ответы:
С точки зрения эксплуатации
в заявлениях нет абсолютно никакой разницы
Комментарий @ siride - это как раз то, что нужно.
Из той же документации
ВАШИ АКТУАЛЬНЫЕ ВОПРОСЫ
Поскольку оба запроса одинаковы, нет никакой разницы
Использование
LIMIT
не меняет никаких наборов результатов. Они просто перемещаются в наборе результатов.Этот запрос
будет отличаться от
потому что LIMIT применяется на другой стадии.
Первый запрос ничего не возвращает, если имя таблицы содержит менее 1000 строк
Второй запрос ничего не возвращает, если подзапрос имеет менее 1000 строк
ВЫВОД
Вам нужно будет сформировать запрос, чтобы убедиться, что вы сортируете данные на правильном этапе.
источник