2008-11-01 15 views

Odpowiedz

46

Generalnie int.

bigint jeśli myślisz, że będziesz miał więcej wierszy niż atomy we wszechświecie.

uniqueidentifier jest przydatna, gdy trzeba globalnie unikalne klucze (klucze, które są gwarantowane jest unikatowy na wszystkich tabel w schemacie, może nawet powszechnie unikalny (nie pamiętam))

pozostałe dwa I nie użyłby ich, nie są one typami integralnymi (mają ułamki, które nie mają większego sensu jak klucze).

+4

Jeśli wybierzesz unikalnyidentyfikator, rozważ użycie go jako klucza podstawowego NIEAKTYWNIONEGO, w przeciwnym razie wstawianie może powodować problemy z wydajnością. – Brannon

+0

Dzięki za ulepszenie, Brannon. –

+2

int jest ograniczone "tylko" około 2 miliardy. Osiągnąłem już ten limit dzięki niektórym funkcjom logowania;) – Mose

2

Jednym z głównych powodów, dla których nie można używać identyfikatorów GUID dla PK, jest ich straszliwy współczynnik wypełnienia dla stron indeksowych - takie nadużycie może znacznie zwiększyć twoje koszty wydajności we/wy. Identyfikatory GUID powinny być pozostawione jako AK, a zamiast tego powinny wywoływać kwerendy z pochodnymi PK, gdy tylko jest to możliwe.

+7

To naprawdę jest trochę niedokładne - GUID, ponieważ PK jest w porządku - GUID, ponieważ KLUCZ KLAWIATURA jest desaster. PK per se nie ma wpływu na fizyczną organizację danych - to jest zadanie klucza klastrowania :) –

0

dla procesorów 32-bitowych, int najprawdopodobniej będzie najbardziej wydajnym formatem przetwarzania.

+1

Granice słów są mniej istotne niż zajmowane miejsce przełączające się z Int do BigInt - chyba że spodziewamy się liczby wierszy w miliardach, z wyjątkiem bajtów i spędź je w innym miejscu. Koszt wejścia/wyjścia jest o kilka zamówień droższy niż dostęp do pamięci. – stephbu

+0

Zgadzam się, dodaję kolejny powód użycia int. – dkretz

20

Naprawdę trzeba zachować dwa oddzielne problemy APT:

1) klucz podstawowy jest logiczną konstrukcją - jeden z głównych kandydatów, który jednoznacznie identyfikuje i niezawodnie wiersz w tabeli. Może to być cokolwiek, naprawdę - INT, GUID, string - wybierz to, co ma sens dla twojego scenariusza.

2) grupowanie klucz (kolumna lub kolumn, które definiują „indeksu klastrowego” na stole) - jest to fizyczny przechowywania związane rzeczą, a tu, mały, stabilny, coraz większa typ danych to najlepszy wybór - INT lub BIGINT jako domyślna opcja.

Domyślnie klucz podstawowy na tabeli programu SQL Server jest również używany jako klucz klastrowania - ale nie musi tak być! Osobiście wydaje mi się, że z czasem osiągnięto znaczny wzrost wydajności, dzieląc poprzedni klucz klastrowy oparty na GUID na dwa oddzielne klucze - klucz podstawowy (logiczny) na identyfikatorze GUID i klucz klastrowy (zamówienie) na oddzielnej ID użytkownika INT (1 , 1) kolumna.

Fragmentacja indeksu została obniżona do minimalnych poziomów, a tym samym wydajność wyszukiwania indeksu została podwyższona - wysoce zalecane!

Marc

+0

Tak, całkowicie zgodziłem się z Marcem - to dość rzadkie, że przeciętny lud widzi coś poza narzędziami do tworzenia diagramów, i tak łatwo jest kliknąć prawym przyciskiem myszy, ustawić PK ... – stephbu

+0

Bardzo przydatne informacje, dziękuję za udostępnienie! – Martin

1

unsigned int o cokolwiek rozmiar, który spełnia swoje szczególne potrzeby

+6

Z wyjątkiem serwera SQL nie ma niepodpisanych typów danych. – Joe

Powiązane problemy