Jeśli chodzi o użycie kluczy sekwencyjnych (jak w przypadku tożsamości, sekwencji i NEWSEQUENTIALID) kontra niesekwencyjnych (jak w przypadku NEWID lub niestandardowego generatora losowych kluczy), należy wziąć pod uwagę kilka aspektów.
Począwszy od klawiszy sekwencyjnych, wszystkie wiersze przechodzą w prawy koniec indeksu. Gdy strona jest pełna, SQL Server przydziela nową stronę i wypełnia ją. Powoduje to mniejszą fragmentację indeksu, co jest korzystne dla wydajności odczytu. Ponadto insercje mogą być szybsze, gdy pojedyncza sesja ładuje dane, a dane znajdują się na jednym dysku lub niewielkiej liczbie napędów.
Jednak w przypadku podsystemów pamięci masowej o wysokim końcu, które mają wiele wrzecion, sytuacja może się różnić.Podczas ładowania danych z wielu sesji kończy się rywalizacja o zatrzaskiwanie strony (zatrzaski są to obiekty używane do synchronizowania dostępu do stron bazy danych) na prawe strony listy połączonych poziomów list indeksów. To wąskie gardło uniemożliwia wykorzystanie pełnej przepustowości podsystemu pamięci masowej. Pamiętaj, że jeśli zdecydujesz się używać klawiszy sekwencyjnych i używasz ich numerycznych, zawsze możesz zacząć od najniższej wartości w typie, aby użyć całego zakresu. Na przykład zamiast zaczynać od 1 w typie INT, można rozpocząć od -2,147,483,648.
Należy rozważyć niesekwencyjne klucze, takie jak losowe wygenerowane za pomocą NEWID lub niestandardowe rozwiązanie. Próbując zmusić wiersz do już pełnej strony, SQL Server wykonuje klasyczną podział stron - przydziela nową stronę i przenosi połowę wierszy z oryginalnej strony do nowej. Podział strony ma koszt, a dodatkowo powoduje fragmentację indeksu. Fragmentacja indeksu może mieć negatywny wpływ na wydajność odczytów. Jednak pod względem wydajności insertów, jeśli podsystem pamięci zawiera wiele wrzecion i ładujesz dane z wielu sesji, kolejność losowa może być lepsza niż sekwencja pomimo podziałów.
Dzieje się tak dlatego, że nie ma gorącego miejsca na prawym końcu indeksu i korzystasz lepiej z dostępnej przepustowości podsystemu pamięci. Dobrym przykładem na benchmark pokazujący tę strategię można znaleźć na blogu Thomasa Kejsera pod adresem http://blog.kejser.org/2011/10/05/boosting-insert-speed-by-generating-scalable-keys/.
Źródło: Zapytania Microsoft® SQL Server® 2012 Exam 70-461 Training Kit
Huh? Jeśli są generowane sekwencyjnie Jak można zagwarantować, że wygenerowany identyfikator GUID jest rzeczywiście unikatowy, zamiast być po prostu czymś, co wygląda jak identyfikator GUID? – Justin
@Justing - nie ma * gwarancji *, że GUID jest wyjątkowy, jest po prostu bardzo prawdopodobne. –
Linki są niestabilne ... Fotia 404s link w odpowiedzi. –