Есть ли способ, которым я могу выяснить лучший способ узнать, какие индексы создать для таблицы?
postgresql
database-design
index-tuning
Ник Джинанто
источник
источник
WHERE
предложениях.Ответы:
Краткие правила. (Некоторые из них создаются автоматически, но могут быть позже удалены вручную, в зависимости от вашей базы данных. Не думайте, что вы всегда будете работать с PostgreSQL.)
Каждый первичный ключ означает, что первичные ключи с несколькими столбцами должны иметь один индекс, охватывающий все столбцы. PostgreSQL создаст этот индекс автоматически, если вы объявите первичный ключ из нескольких столбцов.
Во многих случаях один многостолбцовый индекс обеспечивает лучшую производительность, чем несколько одностолбечных. Мониторинг медленных запросов и проводите тестирование, чтобы выяснить, что есть что.
Предположим, что любое изменение в индексировании улучшит некоторые действия базы данных и ухудшит другие. Я считаю полезным иметь набор операторов SQL, которые я могу профилировать до и после внесения изменений в индексы. Этот набор включает инструкции SELECT, INSERT, UPDATE и DELETE.
Там нет замены для изучения документов для ваших конкретных DBMS.
источник
В дополнение к тому, что @Catcall уже предоставлен , и добавим небольшую корректировку:
Я также рассмотрел некоторые основы в этом тесно связанном ответе на SO в последнее время .
Ответы пока что указывают на то, что вам нужно создавать индексы для первичных ключей, но в PostgreSQL это не так (применяются частичные исключения). Я цитирую руководство здесь :
Жирный акцент мой.
Вы можете хотеть , чтобы создать дополнительные индексы для второго или последующих столбцов индекса многоколоночного, но первый , как правило , покрыто только штраф индекса многоколоночного - кроме случаев , когда дополнительные колонки делают индекс намного больше. Мы обсудили это очень подробно под этим вопросом:
Составной индекс также хорош для запросов по первому полю?
Многоколоночные индексы , частичные индексы и индексы выражений являются особенно мощными инструментами в PostgreSQL. Начиная с PostgreSQL 9.2, также есть сканирование только по индексу , что эквивалентно «покрывающим индексам» в других RDBMS. Это не другой тип индекса, а новая возможность СУБД с существующими типами индекса.
Каждый индекс несет определенные затраты , поэтому нет никаких базовых знаний, чтобы действительно оптимизировать индексацию. Просто создание большего количества индексов может принести больше вреда, чем пользы. В частности, индексы могут препятствовать повышению производительности обновлений HOT .
Как правило, операции записи (
DELETE
,UPDATE
) становятся более дорогими (но также могут приносить пользу!), Тогда как операции чтения (SELECT
) обычно приносят пользу. Слишком много индексов может исчерпать кэш-память, так что даже операции чтения могут страдать.Наконец, на этой странице Вики Postgres по обслуживанию индексов есть инструменты для поиска дубликатов или неиспользуемых индексов (среди прочего).
источник
Есть два варианта.
Ответ для того, чтобы сделать это самостоятельно, довольно подробно задокументирован здесь. Итак, давайте посмотрим на что-то еще.
Pghero
Pghero может помочь вам, если вам нужна автоматическая консультация.
Тем не менее, у него есть некоторые недостатки.
WHERE
иORDER BY
, нетJOINS
.Проверьте это видео для получения дополнительной информации .
источник