За тестване За целите можете да принудите използването на индекса чрез "деактивиране" на последователни сканирания - най-добре само в текущата ви сесия:
SET enable_seqscan = OFF;
Правне използвайте това на продуктивен сървър. Подробности в ръководството тук.
Цитирах "деактивиране", защото всъщност не можете да деактивирате последователното сканиране на таблици. Но всяка друга налична опция вече е за предпочитане за Postgres. Това ще докаже, че многоколонният индекс на (metric_id, t)
може да се използва - просто не е толкова ефективен, колкото индекс на водещата колона.
Вероятно ще получите по-добри резултати, като промените реда на колоните във вашия PRIMARY KEY
(и индексът, използван за прилагането му зад завесите с него) до (t, metric_id)
. Или създайте допълнителен индекс с обърнати колони като този.
- Съставният индекс добър ли е и за заявки в първото поле?
Обикновено не е нужно да налагате по-добри планове за заявки чрез ръчна намеса. Ако зададете enable_seqscan = OFF
води до много по-добър план, вероятно нещо не е наред във вашата база данни. Помислете за този свързан отговор:
- Пазете PostgreSQL понякога да избира лош план за заявка