Зачем иметь небольшое количество индексов с несколькими столбцами - PullRequest
0 голосов
/ 17 ноября 2010

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

Ответы [ 3 ]

2 голосов
/ 17 ноября 2010

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

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

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

1 голос
/ 17 ноября 2010

Причина в том, что для каждого индекса требуется отдельная структура данных, которая должна поддерживаться механизмом БД. Итак, если у вас много маленьких индексов, у вас есть много таких структур. Если у вас есть один с большим количеством столбцов, у вас есть одна структура.

Но на самом деле есть более веские причины использовать один большой индекс, а не множество маленьких: 1) Меньше работы по синхронизации должно быть сделано! Только один индекс 2) Вы можете иметь кластеризованный индекс (конечно, не слишком большой), который == к скорости. Обычно вы не можете определить несколько кластерных индексов.

Другими словами: он менее стрессовый для движка БД, поскольку может манипулировать меньшим количеством структур данных. Более того, возможно, вы делаете что-то не так, если у вас так много индексов - проблема дизайна здесь. Не то чтобы возникла проблема с дизайном, но в 95% случаев я видел много индекс = ошибка проектирования . Таким образом, вы используете меньше индексов (лучший только кластеризованный) с большим количеством столбцов :) Вставка / обновление может выполняться медленнее, но это вы должны решить для своего конкретного случая: что делается чаще для выбора или сохранения данных? Если выбрать, следуйте моему предложению, если не много маленьких индексов может иметь больше смысла (или нет:)

0 голосов
/ 17 ноября 2010

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

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