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 integerkolumn (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 UNIQUEograniczenie. Od Postgres 11 możesz uniknąć dodania bdo definicji ograniczenia z INCLUDEklauzulą. 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: