Как использовать столбцы индекса MySQL?

когда вы используете каждый тип индекса MySQL?

  • первичный - столбцы первичного ключа?
  • UNIQUE-внешние ключи?
  • - ??

для действительно больших таблиц индексированные столбцы повышают производительность?

5 ответов


первичный

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

уникальный

уникальный индекс гарантирует, что ваша СУБД не принимать повторяющиеся записи для этого столбца. Вы спрашиваете: "иностранные ключи?- Нет! Это не было бы полезно, поскольку внешние ключи для каждого определения склонны быть дубликатами (один ко многим, много ко многим).

индекс

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

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

Это означает, что вы должны тщательно оценить использование индексов. На основании этого можно с уверенностью сказать одно:неиспользуемые индексы должны быть избегал, респ. удалено!


Я не так хорошо знаком с MySQL, однако я считаю, что следующее верно для большинства серверов баз данных. Индекс-это сбалансированное дерево, которое позволяет базе данных сканировать таблицу на наличие данных. Например, скажем, у вас есть следующая таблица.

CREATE TABLE person (
    id    SERIAL,
    name  VARCHAR(20),
    dob   VARCHAR(20)
);

Если вы создали индекс в поле "Имя", это создаст в сбалансированном дереве для этих данных в таблице для столбца "имя". Сбалансированные структуры данных дерева позволяют ускорить поиск результатов (см. http://www.solutionhacker.com/tag/balanced-tree/).

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

это не сможет выполнить поиск по индексу и вместо этого выполнит последовательное сканирование таблицы, вызывая UPPER () для каждой строки столбца:name в таблице.

select *
from person
where UPPER(name) = "BOB";

Это также будет иметь следующий эффект, потому что индекс будет отсортирован начиная с первой буквы. Однако замена термина поиска на "%B " будет использовать индекс.

select *
from person
where name like "%B"

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

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

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


PRIMARY определяет первичный ключ, да.

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

INDEX создает индекс для указанного столбца и, да, он улучшает производительность для больших таблиц, сортировка и поиск чего-то в этом столбце может быть намного быстрее, если вы используете индексирование.


чем больше таблица, тем больше выгода от использования индекса. Обратите внимание, что индексы замедляют операции вставки (и, возможно, обновления), поэтому убедитесь, что вы не индексируете слишком много полей.