Как избавиться от order by или оптимизировать запрос

#php #mysql

#php #mysql

Вопрос:

У меня есть запрос

 select field from table order by field asc limit 4000, 30;
  

Таблица имеет миллион строк order by при таком простом выборе, что приводит к большим задержкам. В поле есть индекс.
Как избавиться от ‘order by’ и ускорить ограничение и получить тот же результат с помощью select?

Мое предложение состоит в том, чтобы изменить порядок строк, а затем просто упростить select field from table . Не могли бы вы предложить идею получше?

Комментарии:

1. Сработает ли использование системы индексов?

2. Вы делаете заказ по разным полям? Или вы просто хотите каждый раз заказывать по одному и тому же полю?

3. Не могли бы вы добавить int столбец order и попробовать сортировать по нему?

4. @Newbie1: итак, вам нужно выбрать все миллионы строк? Для чего?

5. Есть ли необходимость отображать все результаты по миллиону строк? Вы можете добавить ОГРАНИЧЕНИЕ для вашего запроса, чтобы ускорить запрос и отображение, если нет необходимости отображать все результаты.

Ответ №1:

Тип данных поля влияет на то, насколько быстрым будет order by. Целочисленные столбцы, как правило, быстрее всего для этого, а текстовые столбцы — медленнее всего. Если тип данных столбца, по которому вы сортируете, текстовый, я бы предложил вместо этого использовать числовой столбец для упорядочивания.

Индексирование столбца, по которому вы упорядочиваете, должно повысить производительность, но MySQL может проигнорировать это и выполнить полное сканирование таблицы. ПРИНУДИТЕЛЬНЫЙ ИНДЕКС может быть полезен для ускорения сортировки.

Изменение физического порядка столбцов в таблице не будет иметь предсказуемого эффекта, поскольку порядок строк по умолчанию не определен ни в MySQL, ни в какой другой базе данных SQL, о которой я знаю. По мере добавления, изменения и удаления строк физическое положение строки в таблице со временем будет меняться, поэтому вы не сможете зависеть от нее при упорядочении.

http://www.mysqlperformanceblog.com/2006/09/01/order-by-limit-performance-optimization в / есть несколько полезных советов по оптимизации сортировки.

Комментарии:

1. Хорошая статья, но не помогла решить мою проблему. Я не могу использовать between, на integer уже есть индекс. Является ли кэш одним-единственным решением?