Поля после «ORDER BY» или «WHERE» и индекс в MySQL

0

У полей после "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
  • 1
    Вам нужно перефразировать это, а также привести запрос в качестве примера.
  • 1
    Я сделал все возможное, чтобы реструктурировать ваш вопрос на основе вашего обновления, но я все еще не понимаю, что вы подразумеваете под «может иметь индекс».
Теги:
sql-order-by

3 ответа

2
Лучший ответ

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

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

Update:

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

  • 0
    Я отредактировал свой вопрос. Спасибо...
0

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

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

0

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

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню