Каковы недостатки наличия многих показателей? - PullRequest
17 голосов
/ 19 апреля 2009

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

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

Ответы [ 4 ]

40 голосов
/ 19 апреля 2009

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

6 голосов
/ 19 апреля 2009

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

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

Sqlite Объясните

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

6 голосов
/ 19 апреля 2009

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

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

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

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

5 голосов
/ 19 апреля 2009

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

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

...