Mamy starszą bazę danych, która jest serwerem dbl (2005 i 2008).Wcześniejsza baza danych serwera SQL do klastrowanego indeksu lub nie
Wszystkie klucze podstawowe w tabelach to UniqueIdentifiers.
Tabele obecnie nie mają utworzonego indeksu klastrowego, a obecnie występują problemy z wydajnością w tabelach zawierających jedynie rekordy 750 tys. Jest to pierwsza baza danych, na której pracowałem z unikalnymi identyfikatorami, jako jedynym kluczem podstawowym i nigdy nie widziałem serwera sql tak wolnego z powracającymi danymi.
Nie chcę tworzyć indeksu klastrowego na identyfikatorze uniqueidentifier, ponieważ nie są sekwencyjne, a zatem spowolnią aplikacje w dół, jeśli chodzi o wstawianie danych.
Nie można usunąć unikalnego identyfikatora, który jest używany do celów zarządzania tożsamością rekordu zdalnego witryny.
Zastanawiałem się nad dodaniem dużej kolumny tożsamości całkowitej do tabel i utworzeniem indeksu klastrowego w tej kolumnie z uwzględnieniem kolumny unikalnego identyfikatora.
tj
int identity - Pierwsza kolumna, aby utrzymać wkładkę przyspiesza unikalny identyfikator - w celu zapewnienia stosowania wciąż działa zgodnie z oczekiwaniami.
Celem jest poprawienie zapytania tożsamości i połączenie wydajności zapytań tabelowych.
Pytanie 1: Czy poprawi to wydajność zapytania dla db lub spowolni go?
Q2: Czy istnieje alternatywa do tej, której nie wymieniłem?
Dzięki Pete
Edit: Występ kwestie są na pobieranie danych za pośrednictwem wybranych sprawozdań szybko, zwłaszcza jeśli niektóre z bardziej „transakcyjnych/zmiany” tabele są połączone ze sobą.
Edit 2: sprzężeń pomiędzy stoły są generalnie wszystko pomiędzy klucza podstawowego i kluczy obcych, dla tabel, które mają klucze obce są one zawarte w nieklastrowanym indeksu, aby zapewnić więcej indeksu obejmującego.
Wszystkie tabele nie mają innych wartości, które zapewniłyby dobry indeks klastrowy.
Pochylam się raczej nad dodaniem dodatkowej kolumny tożsamości w każdej z tabel wysokiego obciążenia, a następnie dodaniu aktualnej kolumny Guid PK w indeksie klastrowym w celu zapewnienia najlepszej wydajności zapytania.
Edycja 3: Chciałbym oszacować, że 80% zapytań jest wykonywanych wyłącznie na kluczyach podstawowych i obcych za pośrednictwem mechanizmu dostępu do danych. Zasadniczo nasz model danych ma leniwy załadowane obiekty, które wykonują zapytanie po uzyskaniu dostępu, te zapytania używają identyfikatora obiektów i kolumny PK. Mamy dużą liczbę zapytań o wykluczanie/włączanie danych kierowanych przez użytkownika, które używają kolumn klucza obcego jako filtru opartego na kryteriach typu X, wykluczając następujące identyfikatory. Pozostałe 20% to miejsca, w których klauzule w kolumnach Enum (int) lub w zakresie dat, bardzo niewiele zapytań tekstowych są wykonywane w systemie.
Tam, gdzie to możliwe, dodałem już indeksy obejmujące najcięższe zapytania, ale jak na razie jestem rozczarowany wynikami. Jak mówi bluefooted, dane są przechowywane jako sterty.
Czy istnieje obecnie indeks klastrowany na uniqueidentifiers? – jwsample
Tak, mamy nie klastrowane indeksy na unikalnych identyfikatorów. – Peter
Ponieważ masz co najmniej jeden indeks w tej kolumnie, już ponosisz karę wykonania we wkładce. W zależności od struktury tabeli możesz po prostu upuścić indeks nieklastrowy i przełączyć się na klaster z niewielkim wpływem na to, co aktualnie widzisz. – jwsample