Postgres може да използва неводещи колони в индекс на b-дърво, но в много по-малко ефективен режим.
Ако първата колона е много избирателна (само няколко реда на A
), тогава едва ли ще забележите разлика в производителността, тъй като и двата метода за достъп (дори последователно сканиране върху намаления набор) са евтини. Ударът на производителността нараства с броя на редовете на A
.
За случая, който описвате, предлагам да създадете индекс на (A, C, B)
или (C, A, B)
(само се уверете, че B
идва на последно място), за да оптимизирате производителността. По този начин получавате най-добра производителност за заявки за (A, B, C)
и на (A, C)
еднакви.
За разлика от последователността от колони в индекса, последователността от предикати в заявката няма значение.
Обсъдихме това много подробно на dba.SE:
Обърнете внимание, че го правине има значение дали водите с A, C
или C, A
за конкретния случай:
Има и някои други съображения, но вашият въпрос не съдържа всички уместни подробности.