Die Tatsache, Sie GUID als Clustered-Index verwenden werden definitiv negativ auf Ihre Leistung auswirken. Sogar mit dem NEWSEQUENTIALGUID sind die GUIDs nicht wirklich sequentiell - sie sind nur teilweise. Ihre Zufälligkeit von Natur aus wird definitiv zu einer höheren Indexfragmentierung und somit zu weniger optimalen Suchzeiten führen.
Wenn Sie eine 16-Byte-GUID als Clusterschlüssel haben, wird sie außerdem einem beliebigen nicht gruppierten Index für diese Tabelle hinzugefügt. Das hört sich vielleicht nicht so schlimm an, aber wenn du 10 Millionen hast. Zeilen, 10 nicht gruppierte Indizes, die eine 16-Byte-GUID vs. 4-Byte-INT verwenden kostet Sie 1,2 GByte Speicherplatz verschwendet - und nicht nur auf Festplatte (was billig ist), sondern auch in Ihrem SQL-Server-Speicher (seit SQL Server lädt immer ganze 8k Seiten in 8k Blöcke Speicher, egal wie voll oder leer sie sind.
Ich kann den Punkt der Verwendung einer GUID als Primärschlüssel sehen - sie sind fast 100% Garantie, einzigartig zu sein ist ansprechend für Entwickler. ABER: Als Clusterschlüssel sind sie ein Albtraum für Ihre Datenbank.
Meine beste Praxis: Wenn ich wirklich eine GUID als Primärschlüssel benötige, füge ich der Tabelle eine 4-Byte INT IDENTITY hinzu, die dann als Clusterschlüssel dient - die Ergebnisse sind viel besser!
Wenn Sie einen nicht gruppierten Primärschlüssel haben, sind Ihre Abfragen mit der Liste der GUIDs genauso schnell wie mit einem gruppierten Primärschlüssel. Wenn Sie keine GUIDs für Ihren Clusterschlüssel verwenden, wird Ihre Tabelle noch besser schlussendlich.
Lesen Sie mehr auf Clustertaste nach oben und warum es so wichtig, die richtigen in Kimberly Tripps' Blog zu holen - die die Königin von Indexing und kann die Dinge viel besser erklären als ich:
Marc
Eine disparate Liste von verschiedenen Werten in einer IN-Anweisung ist nicht genau eine Bereichsabfrage .... –
@marc_s: Das ist ein guter Punkt! Aber sie sind sequentielle GUIDs, wie sie in der ursprünglichen Frage gestellt wurden, also denke ich, dass sie als Bereich auftreten könnten. –
Ursprüngliche Sequenz ist zufällig wie von Lucene.Net Volltextindex zurückgegeben, aber wenn es eine Abfrage beschleunigt, kein Problem beim Sortieren von GUIDs im Speicher. – MicMit