Beim Design der Datenbank verwenden wir oft Guid oder int als Hauptschlüssel, und nach dem Wissen, das wir gelernt haben, haben wir immer das Gefühl gehabt, dass int als Hauptschlüssel effizienter ist, aber ohne sorgfältiges Testen unmöglich ist
Erklären Sie den Grund. Es ist passiert, dass ich heute bei der Optimierung der Datenbank auf dieses Problem gestoßen bin, also habe ich einen Test gemacht.
Testumgebung:
Desktop-PC Pentiun(R) 4 CPU 3,06GHz Gewinne XP Profi 1,5G DDR RAM SQL Server 2005 Personal
Testprozess:
Erstens: Erstelle eine Testdatenbank, Test
Die Testergebnisse sind wie folgt:
Wie oben erwähnt, ist die Effizienz der Verwendung von int als Primärschlüssel im Vergleich zur Verwendung von guid als Hauptschlüssel verbessert, insbesondere bei einer Verbindungsanfrage und dem Löschen von Datensätzen.
Außerdem trat bei der heutigen Datenabfrage mit dem Hauptschlüssel im GUID die Abfragezeitabfrage wiederholt auf, da mehrere Unterfrageergebnisse verschachtelt wurden. Deshalb bin ich dafür, int als Hauptschlüssel zu verwenden, und ich stimme Guid als Hauptschlüssel nicht zu. Die oben genannten Ansichten spiegeln persönliche Meinungen wider, und jeder ist eingeladen, seine Meinung zu äußern und die Vor- und Nachteile von GUID und INT als Hauptschlüssel zu erklären.
Folgetests:
Nachdem die Brüder ihn daran erinnert haben, wurde heute ein nicht-geclusterter Index zu zwei Untertabellen hinzugefügt:
ERSTELLEN SIE EINEN NICHT-GECLUSTERTEN INDEX Index_Detail_Guid Test_Guid_Detail(Guid) ERSTELLEN SIE EINEN NICHT-GECLUSTERTEN INDEX Index_Detail_id AUF Test_Int_Detail(id) Dann führte ich eine interne Verbindungsfrage durch und stellte fest, dass, wie @Xu Shaoxia sagte, die Effizienz tatsächlich nicht offensichtlich genug ist, um mehr als 50 % anzuzeigen, und im Grunde nur etwa 23 % Verbesserung, was immer noch akzeptabel ist.
Daher wird es empfohlen
1. In Systemen, die häufig Datenmigration benötigen, wird empfohlen, Guid zu verwenden. Und das Hinzufügen nicht-clusterter Indizes zu den entsprechenden Fremdschlüsselfeldern, also Feldern für Join-Abfragen, ist von großem Vorteil, um die Leistung zu verbessern. Das Feld der where-Bedingung kann auch bei nicht-clusterierten Indizes hinzugefügt werden.
2. Wenn der Guid-Typ als Primärschlüssel verwendet wird, sollte der Datentyp Uniqueidentifier sein, und man sollte daran denken, den "aggregierten Index" des Primärschlüssels zu kündigen
3. Für Systeme, die nicht migriert werden müssen, oder für kleine Systeme ist es immer noch sehr bequem, int als Primärschlüssel zu verwenden, und es gibt weiterhin eine gewisse Effizienzsteigerung.
|