Pro testování pro účely můžete vynutit použití indexu „vypnutím“ sekvenčního prohledávání – nejlépe pouze ve vaší aktuální relaci:
SET enable_seqscan = OFF;
Ne použít to na produktivním serveru. Podrobnosti v návodu zde.
Citoval jsem "vypnutí", protože ve skutečnosti nelze zakázat sekvenční prohledávání tabulek. Ale jakákoli jiná dostupná možnost je nyní pro Postgres výhodnější. To prokáže, že vícesloupcový index na (metric_id, t)
může být použit - jen není tak účinný jako index na úvodním sloupci.
Lepších výsledků pravděpodobně dosáhnete přepnutím pořadí sloupců v PRIMARY KEY
(a index použitý k jeho implementaci za závěsy) na (t, metric_id)
. Nebo vytvořte další index s takto obrácenými sloupci.
- Je složený index vhodný také pro dotazy na první pole?
Obvykle nemusíte vynucovat lepší plány dotazů ručním zásahem. Při nastavení enable_seqscan = OFF
vede k hodně lepší plán, ve vaší databázi pravděpodobně není něco v pořádku. Zvažte tuto související odpověď:
- Zabraňte PostgreSQL, aby někdy zvolil špatný plán dotazů