To z pewnością jest. Omówiliśmy to szczegółowo w powiązanym pytaniu:
Miejsce jest przydzielane w wielokrotnościach MAXALIGN
, co zwykle wynosi 8 bajtów w 64-bitowym systemie operacyjnym lub (znacznie rzadziej) 4 bajty w 32-bitowym systemie operacyjnym. Jeśli nie jesteś pewien, sprawdź pg_controldata
. Zależy to również od typów danych indeksowanych kolumn (niektóre wymagają wypełnienia wyrównania) i rzeczywistej zawartości.
Indeks, powiedzmy, dwóch integer
kolumn (po 4 bajty) zwykle kończy się dokładnie tak samo, jak indeks tylko na jednej, gdzie kolejne 4 bajty są tracone na wypełnienie wyrównania.
W takim przypadku narzędzie do planowania zapytań nie ma tak naprawdę żadnego minusu (a,b)
- w porównaniu z indeksem just (a)
. I generalnie zaleca się, aby wiele zapytań używało tego samego indeksu. Szansa (lub jego części) przebywania w (szybkiej) pamięci podręcznej rośnie po udostępnieniu.
Jeśli indeks jest już włączony (a,b)
, nie ma sensu tworzenie kolejnego indeksu tylko (a)
- chyba że jest znacznie mniejszy. Tak samo jest nie prawdą dla (b,a)
vs. (a)
. Kliknij link w pierwszym wierszu, aby uzyskać więcej informacji na ten temat.
Wychodząc z przeciwnego kierunku, kiedy potrzebujesz dodatkowego indeksu (a,b)
, rozważ rozważ usunięcie istniejącego indeksu tylko (a)
- jeśli to możliwe. Często nie jest to możliwe, ponieważ jest to indeks PK lub UNIQUE
ograniczenie. Od Postgres 11 możesz uniknąć dodania b
do definicji ograniczenia z INCLUDE
klauzulą. Szczegóły w instrukcji.
Lub utwórz nowy indeks (b,a)
zamiast, aby dodatkowo uwzględnić zapytania b
. Tylko w przypadku warunków równości kolejność wyrażeń indeksowych w indeksach btree nie ma znaczenia. Dzieje się tak jednak w przypadku warunków zasięgu. Widzieć:
Istnieją potencjalne wady włączenia dodatkowych kolumn do indeksu, nawet jeśli wykorzystuje to tylko miejsce, które w przeciwnym razie zostałoby utracone przez wypełnienie wyrównania:
- Za każdym razem, gdy dodatkowa kolumna jest aktualizowana, indeks również potrzebuje teraz aktualizacji, co może zwiększać koszty operacji zapisu i tworzyć więcej wzdęć indeksu.
- HOT aktualizacje (Heap Only Tuple) w tabeli nie są możliwe, gdy zaangażowana jest jakakolwiek kolumna indeksu.
Więcej informacji o aktualizacjach HOT:
Jak mierzyć rozmiary obiektów: