Най-общо казано:
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% от вашите редове, помислете за частичен индекс върху него (т.е. къде не тази стойност). Това води до много по-малък индекс, без да пречи на неговата действителна полезност.
Ако постоянно правите заявки към израз, приложен към вашата колона и вашата платформа предлага индекси на изрази, помислете за добавяне на индекс към него. Когато се използва, изразът няма да се оценява за всеки ред.