Różnica w wydajności między indeksem w dwóch kolumnach i umownym wskaźnikiem

0

Pytanie

U mnie jest przyzwoicie duża tabela postgres z kilku miliardów wierszy.

Jednak tabela może być podzielona na jedną kolumnę (type)

Czy powinniśmy zdecydować się na:

Indeks z dwoma kolumnami

create nonclustered index ix_index1 on table1(type, string_urn_id)

lub warunkowy indeks

create nonclustered index ix_index1_alternative on table1(string_urn_id) WHERE type = 'type1'
create nonclustered index ix_index1_alternative2 on table1(string_urn_id) WHERE type = 'type2'
create nonclustered index ix_index1_alternative3 on table1(string_urn_id) WHERE type = 'type3'
....
database-performance postgresql
2021-10-27 02:41:08
1

Najlepsza odpowiedź

1

Nie ma żadnego oświadczenia create nonclustered index w PostgreSQL.

Co lepsze, zależy od definicji "lepiej". Z punktu widzenia obsługi jeden indeks lepiej, bo nie trzeba tworzyć nowego indeksu za każdym razem, gdy dodajesz nowy type.

Z punktu widzenia wydajności, może o tym sądzić tylko test z rzeczywistymi danymi. Podczas planowania wzrośnie z wielu indeksów, ale wydajność zapytań może być nieco wyższa.

Jeśli podzielić tabelę, wydajność zapytań spadnie, ale można to zrobić jednym podzielonym na partycje indeksu na string_urn_id.

2021-10-27 07:02:43

W innych językach

Ta strona jest w innych językach

Русский
..................................................................................................................
Italiano
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................