Каковы самые большие преимущества использования INDEXES в mysql?

Я знаю, что мне нужно иметь первичный набор ключей и устанавливать все, что должно быть уникальным как уникальный ключ, но что такое INDEX и как его использовать?

Каковы преимущества? За и против? Я замечаю, что могу либо использовать их, либо нет, когда я должен?

Ответы

Ответ 1

Краткий ответ:
Индексы ускоряют SELECT и замедляют INSERT.

Обычно лучше иметь индексы, потому что они ускоряют SELECT больше, чем замедляют INSERT.

В UPDATE индекс может ускорить путь вверх, если индексированное поле используется в предложении WHERE и замедляет работу, если вы UPDATE одно из индексированных полей.

Как узнать, когда использовать индекс

Добавьте EXPLAIN перед оператором SELECT.
Например:

EXPLAIN SELECT * FROM table1 
WHERE unindexfield1 > unindexedfield2 
ORDER BY unindexedfield3

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

Объяснение также может сказать вам, лучше ли отбрасывать и индексировать

EXPLAIN SELECT * FROM table1 
WHERE indexedfield1 > indexedfield2 
ORDER BY indexedfield3

Если выбрано очень мало строк, или MySQL решил игнорировать индекс (он делает это время от времени), вы также можете удалить индекс, потому что он равен strong > замедляет ваш INSERT, но не ускоряет ваши SELECT.

Затем снова может быть и то, что ваш оператор выбора недостаточно умный.
(Извините за сложность ответа, я пытался сохранить его простым, но не смог).

Ссылка:
Индексы MySQL - какие лучшие практики?

Ответ 2

Плюсы:

Более быстрый поиск результатов. Все дело в сокращении числа дисковых IO. Вместо того, чтобы сканировать всю таблицу результатов, вы можете уменьшить количество дисковых IO (выборки страниц) с помощью индексных структур, таких как B-Trees или Hash Indexes, чтобы быстрее добраться до ваших данных.

Минусы:

  • Медленнее пишет (потенциально). Вы не только должны записывать свои данные в свои таблицы, но также должны записывать свои индексы. Это может привести к реструктуризации структуры индекса (Hash Index, B-Tree и т.д.), Которая может быть очень дорогостоящей.

  • Занимает больше места на диске, естественно. Вы сохраняете больше данных.

Ответ 3

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

База данных аналогична. Когда у вас есть куча данных в базе данных, у вас появятся определенные способы, которые вы хотите получить. Скажем, у вас есть таблица User, и вы часто просматриваете пользователя по столбцу FirstName. Поскольку это операция, которую вы часто делаете в своем приложении, вам следует рассмотреть возможность использования индекса в этом столбце. Это создаст структуру в базе данных, которая будет отсортирована, если вы захотите, по этому столбцу, чтобы поиск чего-то по имени напоминал поиск слова в словаре. Если у вас не было этого индекса, вам может потребоваться просмотреть ВСЕ строки, прежде чем вы определяете, у кого есть определенное имя FirstName. Добавив индекс, вы сделали это быстро.

Итак, почему бы не поставить индекс на все столбцы и сделать их все быстро? Как и все, есть компромисс. Каждый раз, когда вы вставляете строку в таблицу User, база данных должна будет выполнять свою магию и сортировать все по вашему индексированному столбцу. Это может быть дорого.

Ответ 4

Вам не обязательно иметь первичный ключ. Индексы (любого типа) используются для ускорения запросов и, по крайней мере, с помощью механизма InnoDB, применяют ограничения внешнего ключа. Независимо от того, используете ли вы уникальный или простой (не уникальный) индекс, зависит от того, хотите ли вы разрешить дублирование значений в ключе.

Ответ 6

Индекс позволяет MySQL быстрее находить данные. Вы используете их в столбцах, которые будут использоваться в предложениях WHERE. Например, если у вас есть столбец с именем score и хотите найти все с помощью score > 5, по умолчанию это означает, что MySQL нужно будет сканировать таблицу WHOLE, чтобы найти эти оценки. Однако, если вы используете индекс BTREE, поиск тех, которые удовлетворяют этому условию, будет намного быстрее.

Индексы имеют цену: диск и пространство памяти. Если это очень большая таблица, ваш индекс будет расти довольно большой.

Ответ 7

Подумайте об этом так: каковы самые большие преимущества наличия индекса в книге? Это то же самое. У вас немного большая книга, но вы можете быстро разобраться. Когда вы создаете индекс в столбце, вы говорите, что хотите иметь возможность ссылаться на него в предложении where, чтобы быстро найти его.