Klastry indeksów magazynu kolumn i klucze obce


18

Strojenie wydajności hurtowni danych za pomocą indeksów. Jestem dość nowy w SQL Server 2014. Microsoft opisuje następujące kwestie:

„Uważamy indeks klastrowanego magazynu kolumn za standard do przechowywania tabel faktów hurtowni dużych danych i oczekujemy, że będzie on używany w większości scenariuszy hurtowni danych. Ponieważ indeks klastrowanego magazynu kolumn jest aktualizowalny, obciążenie może wykonać dużą liczbę operacji wstawiania, aktualizacji, i usuń operacje ”. http://msdn.microsoft.com/en-us/library/gg492088.aspx

Jeśli jednak przeczytasz dalej w dokumentacji, znajdziesz pod ograniczeniami:

„Nie może mieć unikalnych ograniczeń, ograniczeń klucza podstawowego ani ograniczeń klucza obcego”.

To mnie bardzo myli! Dobrą praktyką (nieobowiązkową) jest posiadanie kluczy obcych w hurtowni danych z różnych powodów (integralność danych, relacje widoczne dla warstwy semantycznej ...)

Dlatego firma Microsoft zaleca klastrowane indeksy magazynu kolumn dla scenariuszy hurtowni danych; jednak nie może obsłużyć relacji klucza obcego ?!

Czy mam rację? Jakie inne podejścia doradzasz? W przeszłości korzystałem z nieklastrowanego indeksu magazynu kolumn w scenariuszach hurtowni danych, z upuszczaniem i przebudowywaniem dla ładowań danych. Jednak SQL Server 2014 nie dodaje żadnej nowej wartości dla hurtowni danych?


Gdy funkcja dojrzewa, zobaczysz, że coraz więcej tych funkcji jest obsługiwanych (do diabła, w 2012 r. Indeksy magazynu kolumn były tylko do odczytu!). W międzyczasie zaoferowano ci kompromis - świetna wydajność z ograniczeniami lub ten sam stary sam stary. Nie sądzę też, aby zamierzały to oznaczać, że każda tabela w DW powinna mieć indeksy klastrów w klastrach i że żadna z tabel nie powinna mieć żadnych ograniczeń - prawdopodobnie istnieje ograniczona liczba tabel w dowolnym DW, co dałoby ogromny sukces bryknięcie.
Aaron Bertrand

3
Uwaga - może obsługiwać łączenia. Relacja FK nie jest całkowicie potrzebna do połączenia. Służy do obsługi integralności referencyjnej - co jest miłe, ale w hurtowni danych MOŻNA pominąć. Na ryzyko, tak, ale także ze wzrostem wydajności.
TomTom

8
A także - „nie ma prawdziwej nowej wartości”? Masz na myśli zapisywanie i tworzenie klastrów, co nie brzmi jak ulepszenie? Czy użytkownicy mogą sprawdzać dane w czasie rzeczywistym zamiast czekać na zrzut i odbudowywać go, aby uzyskać więcej aktualnych danych, nie wydaje się być dobrą rzeczą dla użytkowników i mniejszą konserwacją? wzruszenie ramionami
Aaron Bertrand

Możesz mieć (unikalne) indeksy, tworząc indeksowany widok. Wygląda na to, że infrastruktura do obsługi indeksu już istnieje. Po prostu normalne indeksy nie są (jeszcze) zaimplementowane.
usr

@AaronBertrand W scenariuszu DWH z tabelami faktów z kluczem obcym indeks klastrowanego magazynu kolumn nie działa. To w dużym kontraście z Microsoftem oczekującym, że to jako standard do przechowywania dużych tabel faktów. Mam nadzieję, że możesz udowodnić, że się mylę ...? Ponieważ lubię SQL Server.
OverflowStack

Odpowiedzi:


13

Masz tutaj wiele pytań:

P: (Brak kluczy obcych) bardzo mnie dezorientuje! Dobrą praktyką (nieobowiązkową) jest posiadanie Fk w DWH z różnych powodów (integralność danych, relacje widoczne dla warstwy semantycznej, ...)

Odp .: Prawidłowo, zwykle dobrą praktyką jest posiadanie kluczy obcych w hurtowni danych. Jednak klastrowane indeksy magazynu kolumn jeszcze tego nie obsługują.

P: Więc MS opowiada się za indeksami magazynu klastrowanych kolumn dla scenariuszy DWH, jednak nie może poradzić sobie z relacjami z FK ?!

Odp .: Microsoft udostępnia narzędzia. Od Ciebie zależy, jak korzystasz z tych narzędzi.

Jeśli Twoim największym wyzwaniem jest brak integralności danych w hurtowni danych, wówczas pożądanym narzędziem są konwencjonalne tabele z kluczami obcymi.

Jeśli Twoim największym wyzwaniem jest wydajność zapytań i chcesz sprawdzić swoją integralność danych w ramach procesu ładowania, wówczas pożądanym narzędziem są klastrowane indeksy magazynu kolumn.

P: Jednak SQL 2014 nie dodaje żadnej nowej wartości DWH?

Odp .: Na szczęście klastrowany magazyn kolumn nie był jedyną nową funkcją w SQL Server 2014. Na przykład sprawdź nowy estymator liczności.

P: Dlaczego jestem taki zły i gorzki z powodu sposobu, w jaki moja ulubiona funkcja została wdrożona?

Odp .: Złapałeś mnie - tak naprawdę nie zadałeś tego pytania - ale i tak odpowiem. Witamy w świecie oprogramowania firm trzecich, w którym nie wszystko jest zbudowane zgodnie z twoimi dokładnymi specyfikacjami. Jeśli z pasją czujesz zmianę, którą chciałbyś zobaczyć w produkcie Microsoft, sprawdź Connect.Microsoft.com . To ich proces przesyłania opinii, w którym możesz przesłać zmianę, inne osoby mogą ją zagłosować, a następnie zespół ds. Produktu czyta ją i mówi, dlaczego tego nie zrobi. Czasami. Zazwyczaj zaznaczają to jako „nie naprawi się, działa na moim komputerze”, ale hej, czasem dostajesz odpowiedzi.


„Zgadza się, zwykle dobrą praktyką jest posiadanie kluczy obcych w hurtowni danych” -> SQLCAT - 10 najlepszych praktyk w zakresie budowania hurtowni relacyjnych danych na dużą skalę ... „Buduj nieklastrowane indeksy dla każdego klucza obcego”. -> Nic o wymuszaniu relacji FK wspomnianej w linku, a non-CI jest zbędny z powodu magazynu kolumn, więc nie wskazuje na to, że FK na tabeli faktów, zgadzasz się? Zainteresowany twoimi przemyśleniami na ten temat.
Adrian Torrie,

1
... i dla wymiarów: „Unikaj wymuszania relacji klucza obcego między faktem a tabelami wymiarów, aby umożliwić szybsze ładowanie danych. Możesz utworzyć ograniczenia klucza obcego za pomocą NOCHECK, aby udokumentować relacje; ale nie wymuszaj ich. Zapewnij integralność danych za pomocą funkcji Transform Lookups lub przeprowadzania kontroli integralności danych u źródła danych ”
Adrian Torrie

6

Rozumiem, że czujesz, że brakuje ci części, do których byłeś przyzwyczajony. Ale to tylko dlatego, że ich brakuje.

Niemniej jednak SQL Server był z powodzeniem używany, gdy klucze obce były tylko koncepcją (którą wdrożyliśmy w tamtych czasach za pomocą wyzwalaczy), a nie fizyczną implementacją, taką jak ograniczenie. Deklaratywna integralność referencyjna istniała przynajmniej przez SQL Server 7.0, ale znacznie słabsza niż obecna implementacja.

Jeśli chodzi o wartość indeksu klastrowanego magazynu kolumnowego, zapewnia on indeks, a wiersze można aktualizować. Ta dyskusja może być dla ciebie cenna: http://sqlwithmanoj.com/2014/07/24/maintaining-uniqueness-with-clustered-columnstore-index-sql-server-2014/

Manoj zwraca uwagę, że istnieje sposób utworzenia widoku indeksowanego / zmaterializowanego na górze tej tabeli, z kluczem grupowania jako PK (pierwsza kolumna tabeli / widoku). To, czy ci to odpowiada, jest oczywiście decyzją, którą musisz podjąć.

Ale, jak skomentowali Aaron Bertrand i TomTom, chodzi o lepszą wydajność. Jeśli można zarządzać inne kwestie, które dotyczą Ciebie (i wierzę, że oni w zarządzaniu), a następnie pojawi się sporo korzyści. Skorzystaj więc z ColumnStore, aby samodzielnie wykonać brakujące funkcje i zarządzać nimi.


2

To pytanie dotyczy SQL 2014, ale chcę podać dodatkowe informacje w świetle zmian wprowadzonych w SQL 2016 do indeksów magazynu kolumn, ponieważ może być trudno uporządkować ograniczenia w różnych wersjach, a to pytanie wciąż pojawia się dość wysoko w Google:

W przypadku SQL 2016 Microsoft opisuje metodę użycia nieklastrowanych indeksów Btree (które można teraz dodawać jako indeksy wtórne w klastrowanej tabeli magazynu kolumn) w celu wymuszenia ograniczeń klucza obcego, pod warunkiem że ograniczenie zostanie dodane przed indeksem magazynu kolumn: https: // docs .microsoft.com / en-us / sql / relational-databases / indexes / columnstore-indexes-design-guide

Niko Neugebauer ma również post na blogu na ten temat; w rzeczywistości możliwe jest bezpośrednie tworzenie unikalnych / obcych ograniczeń w tabelach magazynu kolumn (w swojej pracy stosowałem to podejście): http://www.nikoport.com/2015/09/15/columnstore-indexes-part-66- more-clustered-columnstore-ulepszenia-w-sql-server-2016 /

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.