Каковы основные преимущества использования INDEXES в MySQL? - PullRequest
15 голосов
/ 18 апреля 2011

Я знаю, что мне нужно установить первичный ключ и установить все, что должно быть уникальным, в качестве уникального ключа, но что такое ИНДЕКС и как их использовать?

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

Ответы [ 7 ]

18 голосов
/ 18 апреля 2011

Краткий ответ:
Индексы ускоряются 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 решил игнорировать индекс (он делает это время от времени) , тогда вы могли бы также удалить индекс,потому что замедляет ваши insert с, но не ускоряет select.

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

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

9 голосов
/ 18 апреля 2011

Плюсы:

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

Минусы:

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

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

3 голосов
/ 18 апреля 2011

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

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

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

1 голос
/ 18 апреля 2011

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

0 голосов
/ 18 апреля 2011

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

0 голосов
/ 18 апреля 2011

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

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

0 голосов
/ 18 апреля 2011

Это общая концепция базы данных, вы можете использовать внешние ресурсы, чтобы прочитать о ней, например, http://beginner -sql-tutorial.com / sql-index.htm или http://en.wikipedia.org/wiki/Index_(database)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...