I databasedesignet bruger vi ofte guid eller int som hovednøgle, og ifølge den viden, vi har lært, har vi altid følt, at int er mere effektivt som hovednøgle, men det er umuligt uden omhyggelig testning
Forklar årsagen. Det skete, at jeg under optimeringen af databasen i dag stødte på dette problem, så jeg lavede en test.
Testmiljø:
Stationær PC Pentiun(R) 4 CPU 3,06GHz Win XP professionel 1,5G DDR RAM SQL Server 2005 Personal
Testproces:
Først, opret en testdatabase, Test
Testresultaterne er som følger:
Som nævnt ovenfor er effektiviteten ved at bruge int som primærnøgle forbedret sammenlignet med at bruge guid som hovednøgle, især når der er en forbindelsesforespørgsel og sletning af poster.
Desuden opstod forespørgselstimeout gentagne gange i dataforespørgslen med hovednøglen i GUID i dag, fordi flere underforespørgselsresultater blev indlejret. Derfor går jeg ind for at bruge int som hovednøgle, og jeg er ikke enig i, at guid er hovednøglen. Ovenstående synspunkter repræsenterer personlige meninger, og alle er velkomne til at udtrykke deres meninger og forklare fordele og ulemper ved guid og int som hovednøglen.
Opfølgende tests:
Efter at være blevet mindet om det af brødrene, er et ikke-klynget indeks i dag blevet tilføjet til to undertabeller:
OPRET IKKE-KLYNGET INDEKS Index_Detail_Guid på Test_Guid_Detail(Guid) OPRET IKKE-KLYNGET INDEKS Index_Detail_id på Test_Int_Detail(id) Derefter lavede jeg en intern forbindelsesforespørgsel og fandt, at som @Xu Shaoxia sagde, er effektiviteten faktisk ikke tydelig nok til at indikere mere end 50%, og grundlæggende kun omkring 23% forbedring, hvilket stadig er acceptabelt.
Derfor anbefales det
1. I systemer, der ofte har brug for datamigrering, anbefales det at bruge Guid. Og at tilføje ikke-klyngede indekser til de tilsvarende fremmednøglefelter, altså felter brugt til join-forespørgsler, er en stor fordel for at forbedre ydeevnen. Feltet for where-betingelsen kan også tilføjes efter behov for ikke-klyngede indeks.
2. Når Guid-typen bruges som primærnøgle, bør datatypen være unikidentifikator, og husk at annullere "aggregatindekset" for primærnøglen
3. For systemer, der ikke behøver at migreres, eller små systemer, er det stadig meget praktisk at bruge int som primær nøgle, og der er stadig en vis forbedring i effektiviteten.
|