Vid databasens design använder vi ofta guid eller int som huvudnyckel, och enligt den kunskap vi har lärt oss har vi alltid känt att int är mer effektivt som huvudnyckel, men det är omöjligt utan noggranna testningar
Förklara anledningen. Det hände att under optimeringen av databasen idag stötte jag på detta problem, så jag gjorde ett test.
Testmiljö:
Stationär PC Pentiun(R) 4 CPU 3,06GHz Win XP professionellt 1,5G DDR RAM SQL Server 2005 Personal
Testprocess:
Först, skapa en testdatabas, Testa
Testresultaten är följande:
Som nämnts ovan är effektiviteten med att använda int som primärnyckel förbättrad jämfört med att använda guid som huvudnyckel, särskilt när det finns en anslutningsfråga och att ta bort poster.
Dessutom inträffade frågetimeout upprepade gånger i datafrågan med huvudnyckeln i GUID idag på grund av att flera delfrågeresultat var inbäddade. Därför är jag för att använda int som huvudnyckel, och jag håller inte med guid som huvudnyckel. Ovanstående åsikter representerar personliga åsikter, och alla är välkomna att uttrycka sina åsikter och förklara för- och nackdelarna med guid och int som huvudnyckel.
Uppföljningstester:
Efter att bröderna påmint dem har ett icke-klustrat index lagts till i två deltabeller idag:
SKAPA ICKE-KLUSTRADE INDEX Index_Detail_Guid på Test_Guid_Detail(Guid) SKAPA ICKE-KLUSTRADE INDEX Index_Detail_id på Test_Int_Detail(id) Sedan gjorde jag en intern anslutningssökning och fann att, som @Xu Shaoxia sa, är effektiviteten faktiskt inte tillräckligt uppenbar för att indikera mer än 50 %, och i princip bara cirka 23 % förbättring, vilket fortfarande är acceptabelt.
Därför rekommenderas det
1. I system som ofta behöver göra datamigrering rekommenderas att använda Guid. Och att lägga till icke-klustrade index till motsvarande främmande nyckelfält, det vill säga fält som används för join-frågor, är till stor nytta för att förbättra prestandan. Fältet för where-villkoret kan också läggas till vid behov för icke-klustrade index.
2. När du använder Guid-typen som primärnyckel bör datatypen vara uniqueidentifier, och kom ihåg att avbryta "aggregerad index" för primärnyckeln
3. För system som inte behöver migreras, eller små system, är det fortfarande mycket bekvämt att använda int som primärnyckel, och det finns fortfarande en viss förbättring i effektivitet.
|