sql >> Databáze >  >> RDS >> PostgreSQL

Optimalizace dotazu Postgres (vynucení skenování indexu)

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ů


  1. Porovnání výkonu virtuálních počítačů Windows Azure, část 2

  2. SQLite LIKE

  3. Konfigurace databázové pošty na serveru SQL

  4. Použijte tnsnames.ora v Oracle SQL Developer