Подтвердить что ты не робот

ДО и DONT для индексов

Каковы некоторые ДО и DONT для улучшения производительности базы данных с использованием индекса?

ДЕЙСТВИТЕЛЬНО должен быть случай, когда должен быть создан индекс, или другой связанный с ним указатель, который улучшит производительность.

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

4b9b3361

Ответ 1

Вообще говоря:

1. Не добавляйте индекс, если он вам действительно не нужен.

Каждый индекс замедляет запись...

2. Будет использован индекс для предложений where:

-- index on foo (bar)
select bar from foo where bar = :bar;

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

-- index on foo (bar) if baz (bar) is frequently updated/deleted.
create table foo (bar references baz (bar)); 

3. Индекс будет использоваться для сортировки, особенно когда он привязан к пределу:

-- index on foo (bar)
select bar from foo order by bar limit 10;

4. Многоколоночные индексы иногда полезны, когда применяются оба варианта: 2. и 3.

В этом случае ставьте сначала условия where, а ключ сортировки - последний:

-- index on foo (baz, bar)
select bar from foo where baz between :baz1 and :baz2 group by bar;

5. Обновляйте статистику своей таблицы.

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

6. Использование индекса зависит от перераспределения таблицы.

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

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

7. Рассмотрите частичные/экспрессивные индексы, когда они доступны.

Если у вас есть поле с тем же значением, за исключением 10% ваших строк, рассмотрите частичный индекс по нему (т.е. где это не значение). Это приводит к гораздо меньшему индексу, не мешая его фактической полезности.

Если вы постоянно запрашиваете выражение, примененное к вашему столбцу, и ваша платформа предлагает индексы выражений, рассмотрите возможность добавления в него индекса. При использовании выражение не будет оцениваться для каждой строки.

Ответ 2

  • Измерьте пропускную способность системы в целом. Индекс может помочь некоторым запросам, но вредит вставке, обновлению и удалению.

  • Создайте индекс.

  • Измерьте пропускную способность системы в целом.

Если производительность лучше, оставьте там индекс. Если производительность хуже, удалите ее.