Kurdami duomenų bazę dažnai naudojame guid arba int kaip pagrindinį raktą, o pagal įgytas žinias visada jautėme, kad int yra efektyvesnis kaip pagrindinis raktas, tačiau tai neįmanoma be kruopštaus bandymo
Paaiškinkite priežastį. Taip atsitiko, kad šiandien optimizuodamas duomenų bazę susidūriau su šia problema, todėl atlikau testą.
Bandymo aplinka:
Stalinis kompiuteris Pentiun(R) 4 CPU 3.06GHz Laimėkite XP profesionalus 1,5 G DDR RAM SQL Server 2005 asmeninis
Testavimo procesas:
Pirmiausia sukurkite bandomąją duomenų bazę,
Bandymo rezultatai yra tokie:
Kaip minėta aukščiau, int kaip pirminio rakto naudojimo efektyvumas yra geresnis, palyginti su guid kaip pagrindiniu raktu, ypač kai yra ryšio užklausa ir ištrinami įrašai.
Be to, duomenų užklausoje su pagrindiniu raktu GUID šiandien užklausos skirtasis laikas pakartotinai įvyko dėl kelių antrinės užklausos rezultatų įdėjimo. Todėl aš esu už int naudojimą kaip pagrindinį raktą ir nesutinku su guid kaip pagrindiniu raktu. Aukščiau pateiktos nuomonės atspindi asmeninę nuomonę, ir kiekvienas yra kviečiamas išreikšti savo nuomonę ir paaiškinti guid ir int kaip pagrindinio rakto privalumus ir trūkumus.
Tolesni tyrimai:
Po to, kai broliai priminė, šiandien prie dviejų sublentelių buvo pridėtas nesugrupuotas indeksas:
KURTI NESUGRUPUOTĄ INDEKSO Index_Detail_Guid Test_Guid_Detail(Guid) NEGRUPUOTOS INDEKSO Index_Detail_id KŪRIMAS Test_Int_Detail(id) Tada atlikau vidinio ryšio užklausą ir nustatiau, kad, kaip sakė @Xu Shaoxia, efektyvumas iš tiesų nėra pakankamai akivaizdus, kad parodytų daugiau nei 50%, o iš esmės tik apie 23% pagerėjimą, kuris vis dar yra priimtinas.
Todėl rekomenduojama
1. Sistemose, kuriose dažnai reikia perkelti duomenis, rekomenduojama naudoti Guid. O nesugrupuotų indeksų pridėjimas prie atitinkamų išorinio rakto laukų, tai yra laukų, naudojamų sujungimo užklausoms, yra labai naudingas siekiant pagerinti našumą. Sąlygos where lauką taip pat galima įtraukti pagal poreikį nesugrupuotiems indeksams.
2. Naudojant GUID tipą kaip pirminį raktą, duomenų tipas turi būti uniqueidentifier ir nepamirškite atšaukti pirminio rakto "agreguoto indekso"
3. Sistemoms, kurių nereikia perkelti, arba mažoms sistemoms vis tiek labai patogu naudoti int kaip pirminį raktą, ir vis dar yra tam tikras efektyvumo pagerėjimas.
|