Каковы недостатки наличия многих показателей?

Недавно я ускорил сложный запрос на порядок, предоставив SQLite хороший индекс для работы. Подобные результаты заставляют меня задуматься, нужно ли мне индексировать множество других полей, которые обычно используются для предложений JOINs или ORDER BY. Но я не хочу переусердствовать и иметь неприятные последствия: я предполагаю, что должны быть некоторые причины не создавать индексы, иначе каждое поле будет проиндексировано по умолчанию.

В этом случае я использую SQLite, но, конечно, приветствуется и независимый от СУБД совет.

4 ответа

Решение

Индексы замедляют вставки и обновления (что может стать серьезной проблемой при блокировке) и удорожают дисковое пространство. Вот и все.

Индексы занимают место на диске для хранения и занимают время для создания и обслуживания. Неиспользованные не дают никакой пользы. Если для запроса имеется много индексов-кандидатов, запрос может быть замедлен, если сервер выберет "неправильный" для запроса.

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

Обычно можно создавать индексы, которые НИКОГДА не будут использоваться - например, и индекс для (не нулевого) поля только с двумя возможными значениями почти наверняка будет бесполезным.

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

Чтобы протестировать ваше конкретное приложение, вы можете поставить "EXPLAIN QUERY PLAN" перед любым выполняемым вами запросом и проверить результаты. Он покажет вам, где он находится или не использует индексы.

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

Sqlite Объяснить

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

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

Это зависит от соотношения чтения и записи в таблице и от того, как часто индекс фактически используется для ускорения запроса.

Другие вопросы по тегам