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 są 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.