Трябва да разберете какво WHERE
клаузи, които ще използвате с тази заявка, колко често ще се среща всяка и колко селективно ще бъде всяко условие.
-
Не индексирайте за заявки, които се случват рядко, освен ако не се налага.
-
Използвайте индекси с няколко колони, като започнете с онези колони, които ще се появят в
=
сравнение. -
Що се отнася до реда на колоните в индекс с няколко колони, започнете с онези колони, които ще се използват сами в заявка (индекс може да се използва за заявка само с някои от колоните, при условие че са в началото на индекса).
-
Може да пропуснете колони с ниска селективност, като
gender
.
Например, с горните ви заявки, ако всички са чести и всички колони са селективни, тези индекси биха били добри:
... ON apartments (city_id, rooms, size)
... ON apartments (area_id, ad_type, price)
... ON apartments (area_id, ad_type, published_at)
Тези индекси могат също да се използват за WHERE
клаузи само с area_id
или city_id
в тях.
Лошо е да имате твърде много индекси.
Ако горният метод би довел до твърде много индекси, напр. защото потребителят може да избира произволни колони за WHERE
клауза, по-добре е да индексирате отделни колони или понякога двойки колони, които редовно вървят заедно.
По този начин PostgreSQL може да избере сканиране на индекс на растерно изображение за комбиниране на няколко индекса за една заявка. Това е по-малко ефективно от обикновеното сканиране на индекс , но обикновено по-добре от последователно сканиране .