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

Optimalizujte tabulky PostgreSQL pouze pro čtení

Sloupce, které se používají k filtrování nebo připojení (nebo v menší míře třídění ) jsou zajímavé pro indexování. Sloupce, které jsou právě vybrány, jsou sotva relevantní! Pro následující dotaz indexuje pouze a a e může být užitečné:

SELECT a,b,c,d
FROM   tbl_a
WHERE  a = $some_value
AND    e < $other_value;

Tady, f a možná c jsou také kandidáty:

SELECT a,b,c,d
FROM   tbl_a
JOIN   tbl_b USING (f)
WHERE  a = $some_value
AND    e < $other_value
ORDER  BY c;

Po vytvoření indexů otestujte, zda jsou skutečně užitečné pomocí EXPLAIN ANALYZE . Porovnejte také doby provádění s indexy a bez nich. Mazání a opětovné vytváření indexů je rychlé a snadné. Existují také parametry k experimentování pomocí EXPLAIN ANALYZE . Rozdíl může být ohromující nebo žádný.
Protože jsou vaše tabulky pouze pro čtení, údržba indexu je levná. Je to pouze otázka místa na disku.

Pokud opravdu chcete vědět, co děláte, začněte přečtením dokumentů .

Pokud nevíte, jaké dotazy můžete očekávat...

  1. Zkuste zaznamenat dostatek dotazů, abyste našli typické případy použití. Protokolovat dotazy s parametrem log_statement = all pro to. Nebo stačí zaznamenat pomalé dotazy pomocí log_min_duration_statement .

  2. Vytvářejte indexy to by mohlo být užitečné a po nějaké době zkontrolujte statistiky, abyste viděli, co se skutečně používá. PostgreSQL má zavedenou celou infrastrukturu pro sledování statistik . Jedním z pohodlných způsobů, jak studovat statistiky (a mnoho dalších úkolů), je pgAdmin kde si můžete vybrat tabulku / funkci / index a získat všechna data na kartě "statistika" v prohlížeči objektů (hlavní okno).

  3. Chcete-li zjistit, zda používané indexy skutečně urychlují, postupujte podle výše uvedeného popisu.

  4. Pokud by se plánovač dotazů rozhodl použít jeden nebo více vašich indexů, ale k žádnému nebo nepříznivému účinku, pak je pravděpodobně něco v nepořádku s vaším nastavením a musíte si prostudovat základy optimalizace výkonu:vakuum, analýza, nákladové parametry, využití paměti, ...



  1. MySQL SELECT AS kombinuje dva sloupce do jednoho

  2. VYBRAT data z více tabulek?

  3. Jak mohu určit nainstalované instance SQL Server a jejich verze?

  4. Ovladač JDBC pro Oracle 10G XE