Najlepsze rozwiązania dotyczące optymalizacji schematu
Schemat tabeli definiuje nazwy i typy danych wszystkich kolumn w tabeli. Schemat tabeli można ustawić podczas tworzenia tabeli lub w ramach procesu pozyskiwania danych, modyfikując odpowiednie mapowanie pozyskiwania. Sposób definiowania schematu tabeli może znacząco wpłynąć na wydajność zapytań. Idealny schemat danych zależy od wielu czynników, w tym przypadków użycia, wzorców dostępu do danych i określonych danych, które mają być przechowywane. W tym artykule opisano najlepsze rozwiązania dotyczące optymalizacji wydajności przez projektowanie wydajnych schematów.
Typy danych
Aby uzyskać ogólne informacje na temat typów danych, zobacz typy danych skalarnych.
Często używane pola powinny być wpisywane kolumny, a nie typ dynamiczny .
Często wyszukiwane lub agregowane właściwości JSON w kolumnie dynamicznej powinny być konwertowane na zwykłą kolumnę w tabeli z bardziej określonym typem, takim jak ciąg, długi lub rzeczywisty.
Kolumny rozrzedzone, które nie są często używane do filtrowania i agregacji, powinny być zbierane jako torba właściwości w kolumnie dynamicznej
DropMappedFields
przy użyciu przekształcenia mapowania.Kolumny daty i godziny powinny być wpisywane jako data/godzina, a nie długie lub inne typy danych.
- Użyj mapowań transformacji Typu Data/godzina z systemu UNIX, na przykład
DateTimeFromUnixMilliseconds
. .
- Użyj mapowań transformacji Typu Data/godzina z systemu UNIX, na przykład
Typ dziesiętny zapewnia dokładną precyzję, co sprawia, że najbardziej nadaje się do zastosowań finansowych i innych, które wymagają dokładnej dokładności. Jest to jednak znacznie wolniejsze niż rzeczywisty typ. Użyj tylko typu dziesiętnego, jeśli jest to wymagane.
Wszystkie kolumny identyfikatora (identyfikacji) powinny być wpisywane jako ciąg, a nie numeryczne. Ten typ sprawi, że indeks będzie znacznie bardziej skuteczny i może znacznie poprawić czas wyszukiwania. Umożliwi również partycjonowanie, ponieważ partycjonowanie można zdefiniować tylko w kolumnach ciągów. Jeśli filtry zapytania używane w tej kolumnie mają tylko równość, na przykład jeśli kolumna ma identyfikatory GUID, możesz użyć profilu
Identifier
kodowania . Aby uzyskać więcej informacji, zobacz zasady kodowania.
Tabele
- Optymalizuj pod kątem wąskich tabel, które są preferowane w przypadku szerokich tabel z setkami kolumn.
- Aby uniknąć kosztownych sprzężeń w czasie zapytania, zdenormalizuj dane wymiarów, wzbogacając je podczas pozyskiwania. Jeśli tabela wymiarów używana do wzbogacania jest aktualizowana, a scenariusz wymaga najnowszej wartości, użyj zmaterializowania widoków , aby zachować tylko najnowszą wartość.
- Jeśli istnieje więcej niż 20 kolumn, które są rozrzedzoną, co oznacza, że wiele wartości ma wartość null, a te kolumny są rzadko używane do wyszukiwania lub agregacji, pogrupuj kolumny jako torbę właściwości JSON w kolumnie dynamicznej przy użyciu
DropMappedFields
mapowania transformacji.
Indeksowanie
Pola, które nigdy nie są przeszukiwane, mogą wyłączyć indeksowanie. Użyj zasad kodowania z profilemBigObject
, aby wyłączyć indeksowanie w kolumnach ciągowych lub dynamicznych.