Подтвердить что ты не робот

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

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

  • PRIMARY - столбцы первичного ключа?
  • UNIQUE - внешние ключи?
  • ИНДЕКС -??

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

4b9b3361

Ответ 1

Primary

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

Уникальный

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

Индекс

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

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

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

Ответ 2

Я не знакомы с 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"

Ответ 3

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

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

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

Ответ 4

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

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

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

Ответ 5

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