Я создаю новую БД и задавался вопросом, есть ли недостаток в добавлении многочисленных индексов к таблицам, которые, я думаю, могут потребовать их.
Если я создаю индекс, но не использую его, это вызовет какие-либо проблемы?
Я создаю новую БД и задавался вопросом, есть ли недостаток в добавлении многочисленных индексов к таблицам, которые, я думаю, могут потребовать их.
Если я создаю индекс, но не использую его, это вызовет какие-либо проблемы?
Индексы ускоряют поиск таблиц, но больше времени на запись. Неиспользованные индексы закончится, что приведет к некоторому ненужному замедлению.
Каждый индекс:
Это означает, что вы должны определять индексы, которые полезны для ваших приложений: слишком много индексов замедляют записи больше, чем вы получите от чтения.
Да. Вы должны добавлять только те индексы, которые необходимы.
Индекс требует дополнительного пространства, и при вставке/обновлении/удалении записей СУБД также необходимо обновить эти индексы. Таким образом, это означает, что для обновления/добавления/удаления записи требуется больше времени, поскольку СУБД должно выполнить некоторое дополнительное администрирование.
добавление многочисленных индексов в таблицы, которые Я думаю, может потребоваться один.
Вы должны добавлять только те индексы, для которых вы уверены, что они необходимы. Чтобы определить столбцы, на которые вы могли бы поместить индексы, вы можете:
Другой - и, возможно, лучший подход - использовать SQL Profiler:
Индексы приводят к увеличению размера базы данных и времени для вставки/обновления/удаления записей. Старайтесь не добавлять их, если не знаете, что будете использовать их.
Наличие индекса означает, что INSERT и UPDATE занимают немного больше времени. Если у вас слишком много индексов, тогда преимущество более быстрого поиска может стать нецелесообразным дополнительным временем INSERT и UPDATE.
Да; с индексом делает выбор быстрее, но потенциально делает вставки медленнее, так как индексы должны обновляться для каждой вставки. Если ваше приложение много пишет и мало читает (например, журнал аудита), вам следует избегать дополнительной индексации.
Не создавайте дополнительных индексов в начале. Подождите, пока вы, по крайней мере, частично разработали систему, чтобы иметь представление об использовании таблицы. Создайте планы запросов, чтобы узнать, что запрашивается (и как, и затраты на производительность), и THEN добавляют новые индексы по мере необходимости.
Не указывайте слепо! Взгляните на свои данные, чтобы увидеть, какие столбцы используются в предикатах SELECT и индексируют их.
Также учтите, что индексы занимают место. Иногда много места. Я видел базы данных, где данные индексирования намного перевешивали необработанные данные в объеме.
Дополнительное пространство, дополнительное время для вставки, как все сказали.
Кроме того, вы должны быть уверены в своих индексах и вашем дизайне, потому что иногда индексы могут фактически замедлять запросы, если оптимизатор запросов выбирает неправильный индекс. Это необычно, но может произойти, если оптимизировать индекс для конкретного соединения и вызвать другое соединение, чтобы фактически стать медленнее. Я не знаю о SQL Server, но вы найдете много трюков, чтобы намекнуть оптимизатору mySQL для создания запросов в определенных целях, чтобы обойти это.
DBA получает много денег, чтобы узнать о таких странных новостях, как индексы (среди прочего), так что да, есть недостатки для добавления большого количества индексов, поэтому будьте осторожны. Опираясь на ваш профилировщик запросов и не просто бросайте индексы слепо при проблемах.
Взгляните на столбцы, используемые в ваших предложениях where, посмотрите на столбцы, используемые в объединениях, если они есть. Как правило, это самое простое правило. Посторонние индексы, как указано выше, замедляют ваши заявления DML и обычно не рекомендуются. В идеале, что я сделал, закончить весь модуль и во время фазы тестирования устройства, убедитесь, что вы можете выполнить анализ нагрузки на модуле, а затем проверить, не видны ли вы замедление и проанализированы случаи замедления, добавьте индексы,
Я думаю, что на это уже был дан ответ, но в основном индексы замедляют вставки/обновления, поскольку индекс обновляется при вставке новой записи (или обновленной версии).
Пространство также рассматривается как память, так и диск.
Таким образом, для баз данных, где происходит большое количество транзакций, это, безусловно, будет иметь заметное влияние на производительность (именно поэтому настройка производительности включает в себя добавление и удаление индексов для оптимизации определенных действий, выполняемых с базой данных).
Удачи.