Поля после "ORDER BY" или "WHERE" и индекса в MySQL - PullRequest
0 голосов
/ 29 августа 2010

Поля после "ORDER BY" или "WHERE" могут иметь индекс (PRIMARY, UNIQUE, INDEX) в mysql?

Рассмотрим таблицу со следующими столбцами:

ID | AddedDate | CatID | Title | Description | Status | Editor

В этих запросах ID, AddedDate и CatID могут иметь индекс?

  SELECT * 
    FROM table WHERE ID = $id


 SELECT * 
    FROM table 
ORDER BY ID

  SELECT * 
    FROM table 
ORDER BY AddedDate

  SELECT * 
    FROM table 
ORDER BY CatID

Ответы [ 3 ]

2 голосов
/ 29 августа 2010

Вы можете заказать по любому полю.Пожалуйста, уточните наш вопрос, если вы хотите узнать больше / что-то еще.

Возможно, вы захотите прочитать ORDER BY оптимизация .Там говорится, что поля с индексом могут даже улучшить сортировку, так как не нужно делать ничего лишнего (в оптимальном случае).

Обновление:

Да, вы можетеесли хотите, добавьте индекс (если это то, что вы имеете в виду, это еще не ясно, как указывает OMG Ponies).В общем, это означает, что вы должны добавить индекс к тем полям, которые вы часто используете в предложениях WHERE.

0 голосов
/ 29 августа 2010

Одним из основных преимуществ наличия индекса является то, что он позволяет выбирать только то подмножество интересующих вас строк. Альтернативой использованию индекса является «полное сканирование таблицы».

Если у вас нет предложения "где", вы не действительно получите большую выгоду от наличия индексов.

0 голосов
/ 29 августа 2010

Насколько мне известно, существует три основных способа упорядочения строк:

  1. Сортировка в памяти: считывание всех строк в память и сортировка их.Очень быстро.
  2. Использование отсортированного индекса: чтение по одной строке за раз, поиск столбцов, которых нет в индексе в базовой таблице.
  3. Сортировка файлов: построение порядка сортировки путем чтениячасть таблицы за один раз.Это действительно медленно.

Для таблиц, которые помещаются в памяти, MySQL, вероятно, выберет вариант 1. Это означает, что он не будет использовать индекс, даже если он присутствует.Индекс будет только перегружен.

Но индексы сияют для больших таблиц.Если таблица слишком велика для памяти, MySQL может избежать болезненной сортировки файлов и полагаться на индекс.

В наши дни памяти много, и таблицы почти всегда помещаются в памяти.Я бы добавил индексы для упорядочения только после того, как увидел, что происходит сортировка файлов.

...