Nie ma nic złego w GUID jako kluczach i klastrach w systemie OLTP (chyba że masz dużo indeksów na stole, które cierpią z powodu zwiększonego rozmiaru klastra). W rzeczywistości są one znacznie bardziej skalowalne niż kolumny TOŻSAMOŚCI.
Powszechnie uważa się, że GUID są wielkim problemem w SQL Server - w dużej mierze jest to po prostu zły. W rzeczywistości GUID może być znacznie bardziej skalowalny na urządzeniach z więcej niż około 8 rdzeniami:
Przykro mi, ale twoi programiści mają rację. Martw się o inne rzeczy, zanim zaczniesz martwić się o GUID.
No i na koniec: dlaczego chcesz indeks klastrów w pierwszej kolejności? Jeśli Twoim problemem jest system OLTP z wieloma małymi indeksami, prawdopodobnie lepiej będzie z kupą.
Zastanówmy się teraz, co fragmentacja (która wprowadzi GUID) ma wpływ na twoje odczyty. Istnieją trzy główne problemy z fragmentacją:
- Strona dzieli koszt dysku we / wy
- Połowa pełnych stron nie jest tak wydajna pod względem pamięci, jak pełne strony
- Powoduje to, że strony są przechowywane w porządku, co zmniejsza prawdopodobieństwo sekwencyjnego We / Wy
Ponieważ Twoje pytanie dotyczy skalowalności, którą możemy zdefiniować jako „Dodanie dodatkowego sprzętu powoduje, że system działa szybciej”, są to najmniejsze problemy. Aby kolejno rozwiązać każdy z nich
Ad 1) Jeśli chcesz skalować, możesz sobie pozwolić na zakup I / O. Nawet tani dysk SSD Samsung / Intel 512 GB (za kilka USD / GB) zapewni Ci ponad 100 000 IOPS. Nie zużyjesz tego w najbliższym czasie w systemie 2-gniazdowym. A jeśli na to wpadniesz, kup jeszcze jeden i gotowe
Ad 2) Jeśli usuniesz w tabeli, i tak będziesz mieć do połowy pełne strony. A nawet jeśli nie, pamięć jest tania i dla wszystkich oprócz największych systemów OLTP - gorące dane powinny się tam zmieścić. Próba upakowania większej ilości danych na stronach jest suboptymalizowana, gdy szukasz skali.
Ad 3) Tabela zbudowana z często podzielonych stron, mocno pofragmentowanych danych wykonuje losowe operacje we / wy z dokładnie taką samą prędkością, jak sekwencyjnie wypełnione tabele
Jeśli chodzi o dołączanie, istnieją dwa główne typy złączeń, które najprawdopodobniej zobaczysz w OLTP, takie jak obciążenie: mieszanie i pętla. Przyjrzyjmy się kolejno:
Łączenie mieszające: łączenie mieszające zakłada, że mały stolik jest skanowany i zwykle szukany jest większy. Małe tabele najprawdopodobniej zapadną w pamięć, więc nie dotyczy Ciebie we / wy. Dotknęliśmy już faktu, że szukanie ma taki sam koszt w indeksie rozdrobnionym jak w indeksie niepodzielonym
Dołącz do pętli: poszukiwany będzie stolik zewnętrzny. Taki sam koszt
Być może trwa również wiele złych operacji skanowania tabeli - ale GUID znów nie jest twoim problemem, właściwe indeksowanie.
Możliwe, że trwają pewne legalne skany zakresu (szczególnie przy łączeniu z kluczami obcymi). W tym przypadku fragmentowane dane są mniej „spakowane” w porównaniu do danych niepofragmentowanych. Zastanówmy się jednak, jakie połączenia prawdopodobnie zobaczysz w dobrze zindeksowanych danych 3NF:
Sprzężenie z tabeli zawierającej odwołanie do klucza obcego do klucza podstawowego tabeli, do której się odwołuje
Odwrotnie
Ad 1) W tym przypadku wybierasz się do pojedynczego wyszukiwania do klucza podstawowego - dołączając n do 1. Fragmentacja lub nie, ten sam koszt (jedno wyszukiwanie)
Ad 2) W takim przypadku łączysz się z tym samym kluczem, ale możesz pobrać więcej niż jeden wiersz (szukanie zakresu). Łączenie w tym przypadku wynosi od 1 do n. Jednak w szukanej tabeli zagranicznej szukasz klucza SAME, który równie dobrze może znajdować się na tej samej stronie w indeksie pofragmentowanym, jak w indeksie niepodzielonym.
Zastanów się przez chwilę nad tymi kluczami obcymi. Nawet jeśli „idealnie” sekwencyjnie położyłeś nasze klucze podstawowe - wszystko, co wskazuje na ten klucz, nadal nie będzie sekwencyjne.
Oczywiście możesz działać na maszynie wirtualnej w jakiejś sieci SAN w jakimś banku, który jest tani, jeśli chodzi o pieniądze i ma wysoki proces. Wtedy wszystkie te rady zostaną utracone. Ale jeśli to jest twój świat, skalowalność prawdopodobnie nie jest tym, czego szukasz - szukasz wydajności i wysokiej prędkości / kosztów - które są dwiema różnymi rzeczami.