Сколько индексов базы данных слишком много? - PullRequest
107 голосов
/ 26 сентября 2008

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

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

Пространство не проблема; у нас есть 4-терабайтный RAID-накопитель, из которого мы используем лишь небольшую часть. Однако меня беспокоит возможное снижение производительности из-за слишком большого количества индексов. Поскольку эти индексы необходимо обновлять каждый раз при добавлении, удалении или изменении строки, я думаю, было бы плохой идеей иметь десятки индексов в одной таблице.

Так сколько индексов считается слишком большим? 10? 25? 50? Или я должен просто охватить действительно, действительно распространенные и очевидные случаи и игнорировать все остальное?

Ответы [ 17 ]

2 голосов
/ 26 сентября 2008

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

2 голосов
/ 26 сентября 2008

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

2 голосов
/ 26 сентября 2008

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

Можете ли вы допустить дополнительное время, необходимое для завершения обновления?

Вам необходимо сравнить затраты и выгоды. Это зависит от вашей ситуации. Не существует магического числа индексов, которое превышает порог «слишком много».

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

1 голос
/ 16 февраля 2010

Sql сервер предоставляет вам несколько хороших инструментов, которые позволяют увидеть, какие индексы действительно используются. В этой статье http://www.mssqltips.com/tip.asp?tip=1239, приводятся некоторые запросы, которые позволяют лучше понять, как часто используется индекс, а не как он обновляется.

1 голос
/ 26 сентября 2008

Сколько там столбцов? Мне всегда говорили создавать индексы из одного столбца, а не из нескольких столбцов. Так что не больше индексов, чем количество столбцов, ИМХО.

1 голос
/ 26 сентября 2008

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

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

0 голосов
/ 26 сентября 2010

Он полностью основан на столбцах, которые используются в предложении Where. И, как Thumb of Rule, у нас должны быть индексы для столбцов внешнего ключа, чтобы избежать DEADLOCKS. Отчет AWR должен периодически анализироваться для понимания необходимости индексов.

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