Potrzebujesz pomocy dotyczącej wydajności zapytania w PostgreSQL. Wydaje się, że odnosi się do indeksów.Nieregularna indeksowana wydajność zapytań w PostgreSQL
Zapytanie:
- filtrów według
type
- zarządzenia
timestamp
, rosnąco:
SELECT * FROM the_table WHERE type = 'some_type' ORDER BY timestamp LIMIT 20
Indeksy:
CREATE INDEX the_table_timestamp_index ON the_table(timestamp);
CREATE INDEX the_table_type_index ON the_table(type);
Wartości pola type
to tylko jeden z około 11 różnych ciągów.
Problem polega na tym, że kwerenda wydaje się wykonywać w czasie O (log n), zajmując tylko kilka milisekund najwięcej razy, z wyjątkiem niektórych wartości type
, które wykonują kilka minut.
W tych przykładowych pytań, pierwszy trwa zaledwie kilka milisekund, aby uruchomić podczas gdy druga zajmuje ponad 30 minut:
SELECT * FROM the_table WHERE type = 'goq' ORDER BY timestamp LIMIT 20
SELECT * FROM the_table WHERE type = 'csp' ORDER BY timestamp LIMIT 20
podejrzewam, ze około 90% pewności, że indeksy mamy nie są właściwe. Myślę, że po przeczytaniu this similar question about index performance, najprawdopodobniej potrzebujemy indeksu złożonego, ponad type
i timestamp
.
Zapytanie planuje, że mam uruchomić tu:
- Expected performance, type-specific index (i.e. new index with the type = 'csq' in the
WHERE
clause). - Slowest, problematic case, indexes as described above.
- Fast case, same indexes as above.
Dziękuję bardzo za pomoc! Wszelkie wskazówki będą naprawdę mile widziane!
Jaki jest rozmiar indeksów? A rozmiar zestawu danych? – Gothmog