Omówienie indeksu

Ta sekcja opisuje indeksowanie w wersji Firestore Enterprise. W wersji Firestore Enterprise domyślnie nie są tworzone żadne indeksy. Aby obniżyć koszty i zwiększyć wydajność bazy danych, utwórz indeksy dla najczęściej używanych zapytań.

Indeksy mają duży wpływ na wydajność bazy danych. Jeśli dla zapytania istnieje indeks, baza danych może efektywnie zwracać wyniki, zmniejszając ilość danych, które trzeba przeskanować, oraz ilość pracy potrzebnej do posortowania wyników. Wpisy indeksu zwiększają jednak koszty przechowywania i ilość pracy wykonywanej podczas operacji zapisu w zindeksowanych polach.

Definicja i struktura indeksu

Indeks składa się z tych elementów:

  • identyfikator kolekcji,
  • lista pól w danej kolekcji,
  • kolejność (rosnąca lub malejąca) dla każdego pola.

Indeks może też włączać opcje rozproszone lub unikalne.

Kolejność indeksowania

Kolejność i kierunek sortowania każdego pola jednoznacznie definiują indeks. Na przykład te indeksy są 2 różnymi indeksami i nie można ich zamieniać:

Kolekcja Pola
miejscowości kraj (rosnąco), populacja (malejąco)
miejscowości populacja (malejąco), kraj (rosnąco)

Podczas tworzenia indeksu obsługującego zapytanie uwzględnij pola w tej samej kolejności co w zapytaniu.

Gęstość indeksu

Domyślnie wpisy indeksu przechowują dane ze wszystkich dokumentów w kolekcji. Jest to tzw. indeks nierozproszony. Wpis indeksu zostanie dodany do dokumentu niezależnie od tego, czy dokument zawiera którekolwiek z pól określonych w indeksie. Podczas generowania wpisów indeksu pola, które nie istnieją, są traktowane jako mające wartość NULL. Aby zmienić to zachowanie, możesz zdefiniować indeks jako indeks rozproszony.

Indeksy rozproszone

Indeks rozproszony indeksuje tylko te dokumenty w kolekcji, które zawierają wartość (w tym wartość null) w co najmniej 1 z zindeksowanych pól. Indeks rozproszony zmniejsza koszty przechowywania i może zwiększyć wydajność.

Unikalne indeksy

Ustaw opcję unikalnego indeksu, aby wymusić unikalne wartości w zindeksowanych polach. W przypadku indeksów w wielu polach każda kombinacja wartości musi być unikalna w całym indeksie. Baza danych odrzuca wszystkie operacje aktualizacji i wstawiania, które próbują utworzyć wpisy indeksu z duplikatami wartości. Jeśli dane w zindeksowanych polach zawierają duplikaty wartości i próbujesz utworzyć unikalny indeks, kompilacja indeksu nie powiedzie się i w szczegółach operacji pojawi się komunikat o błędzie.

Brakujące pola w unikalnym indeksie

Jeśli wstawisz dokument z brakującymi polami dla unikalnego indeksu, indeks ustawi dla tych pól wartości null. Wynikowy wpis indeksu musi być unikalny, w przeciwnym razie operacja się nie powiedzie.

Na przykład w przypadku tego indeksu:

Kolekcja Zindeksowane pola Zakres zapytania
miejscowości nazwa (rosnąco) Kolekcja

Jeśli dodasz do kolekcji dokument {"abbreviation": "LA"}, unikalny indeks utworzy wpis z polem name ustawionym na null. Jeśli następnie spróbujesz dodać dokument {"abbreviation": "NYC"}, operacja się nie powiedzie, ponieważ wynikowy wpis dla unikalnego indeksu będzie taki sam.

To samo zachowanie dotyczy unikalnych indeksów z wieloma polami. Podczas tworzenia lub aktualizowania dokumentu brakujące zindeksowane pola są ustawiane na null, a wynikowy wpis indeksu musi być unikalny.

Rozwiązywanie problemów z błędami kompilacji indeksu

Podczas zarządzania indeksami mogą wystąpić błędy kompilacji indeksu. Operacja indeksowania może się nie powieść, jeśli baza danych napotka problem z danymi. Operacje indeksowania mogą się nie powieść z tych powodów:

  • Osiągnięto limit indeksu. Na przykład operacja mogła osiągnąć maksymalną liczbę wpisów indeksu na dokument. Jeśli utworzenie indeksu się nie powiedzie, zobaczysz komunikat o błędzie. Jeśli nie osiągnięto limitu indeksu, spróbuj ponownie wykonać operację indeksowania.
  • Ustawiono opcję unikalnego indeksu, a dane w zindeksowanych polach spowodowałyby utworzenie duplikatów wpisów indeksu. Aby kontynuować, usuń z danych duplikaty kombinacji wartości.

Co dalej?

Dowiedz się, jak tworzyć indeksy i nimi zarządzać.