Wiem, że tego typu pytania często się pojawiają, ale jeszcze nie przeczytałem żadnych przekonujących argumentów, które pomogłyby mi w podjęciu tej decyzji. Proszę o wyrozumiałość!
Mam ogromną bazę danych - rośnie o około 10 000 000 rekordów dziennie. Dane są relacyjne i ze względu na wydajność ładuję tabelę BULK COPY. Z tego powodu muszę wygenerować klucze do wierszy i nie mogę polegać na kolumnie TOŻSAMOŚCI.
64-bitowa liczba całkowita - bigint - jest na tyle szeroka, że mogę jej używać, ale aby zagwarantować wyjątkowość, potrzebuję scentralizowanego generatora, który utworzy dla mnie moje identyfikatory. Obecnie mam taką usługę generatora, która pozwala usłudze rezerwować numery sekwencyjne X i gwarantuje brak kolizji. Jednak konsekwencją tego jest to, że wszystkie usługi, które mam, zależą od tego jednego scentralizowanego generatora, więc jestem ograniczony w sposobie dystrybucji mojego systemu i nie jestem zadowolony z innych nałożonych zależności (takich jak wymaganie dostępu do sieci) według tego projektu. Czasami był to problem.
Zastanawiam się teraz nad użyciem sekwencyjnych identyfikatorów GUID jako moich kluczy podstawowych (generowanych zewnętrznie w języku SQL). O ile udało mi się ustalić na podstawie własnych testów, jedyną wadą jest narzut miejsca na dysku w szerszym typie danych (co pogarsza ich użycie w indeksach). Nie widziałem żadnego zauważalnego spowolnienia wydajności zapytań w porównaniu do alternatywy Bigint. Ładowanie do stołu BULK COPY jest nieco wolniejsze, ale niewiele. Moje indeksy oparte na GUID nie ulegają fragmentacji dzięki mojej sekwencyjnej implementacji GUID.
Zasadniczo chcę wiedzieć, czy są jakieś inne względy, które mogłem przeoczyć. W tej chwili jestem skłonny zrobić skok i zacząć korzystać z GUID. W żadnym wypadku nie jestem ekspertem od baz danych, więc naprawdę doceniłbym wszelkie wskazówki.