sql >> Database teknologi >  >> RDS >> Mysql

MySQL 5.0 indekser - Unik vs Ikke Unik

UNIK og PRIMÆR NØGLE er begrænsninger , ikke indekser. Selvom de fleste databaser implementerer disse begrænsninger ved at bruge et indeks. Den ekstra overhead af begrænsningen ud over indekset er ubetydelig, især når du tæller omkostningerne ved at spore op og korrigere utilsigtede dubletter, når (ikke hvis) de forekommer.

Indekser er normalt mere effektive, hvis du har en høj selektivitet . Dette er forholdet mellem antallet af distinkte værdier og det samlede antal rækker.

For eksempel kan du i en kolonne for CPR-nummer have 1 million rækker med 1 million forskellige værdier. Så selektiviteten er 1000000/1000000 =1,0 (selvom der er sjældne historiske undtagelser, er SSN'er beregnet til at være unikke).

Men en anden kolonne i den tabel, "køn" kan kun have to forskellige værdier over 1 million rækker. 2/1000000 =meget lav selektivitet.

Et indeks med en UNIK eller PRIMÆR NØGLE-begrænsning har med garanti en selektivitet på 1,0, så det vil altid være så effektivt, som et indeks kan være.

Du spurgte om forskellen mellem en primær nøgle og en unik begrænsning. Hovedsageligt er det, at du kun kan have én primær nøglebegrænsning pr. tabel (selvom denne begrænsnings definition inkluderer flere kolonner), mens du kan have flere unikke begrænsninger. En kolonne med en unik begrænsning kan tillade NULL'er, hvorimod kolonner i primærnøgle begrænsninger ikke må tillade NULL'er. Ellers er primær nøgle og unik meget ens i deres implementering og deres brug.

Du spurgte i en kommentar om, hvorvidt du skulle bruge MyISAM eller InnoDB. I MySQL bruger de udtrykket storage engine . Der er en masse subtile forskelle mellem disse to lagermotorer, men de vigtigste er:

  • InnoDB understøtter transaktioner, så du kan vælge at rulle tilbage eller foretage ændringer. MyISAM er faktisk altid autocommit.
  • InnoDB håndhæver fremmednøglebegrænsninger. MyISAM håndhæver eller gemmer endda ikke begrænsninger for fremmednøgle.

Hvis disse funktioner er ting, du har brug for i din applikation, skal du bruge InnoDB.

For at svare på din kommentar er det ikke så enkelt. InnoDB er faktisk hurtigere end MyISAM i ganske få tilfælde, så det afhænger af din applikations blanding af udvalg, opdateringer, samtidige forespørgsler, indekser, bufferkonfiguration osv.

Se http:/ /www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1/ for en meget grundig ydelsessammenligning af lagermotorerne. InnoDB vinder over MyISAM ofte nok til, at det tydeligvis ikke er muligt at sige, at den ene er hurtigere end den anden.

Som med de fleste præstationsrelaterede spørgsmål er den eneste måde at besvare det til din ansøgning er at teste begge konfigurationer ved hjælp af din applikation og et repræsentativt udsnit af data og måle resultaterne.



  1. Hvad er de forskellige måder at indsætte data i SQL Server Table - SQL Server / TSQL Tutorial Part 100

  2. Hvordan bruger jeg MySQL gennem XAMPP?

  3. Sådan tjekker du din PostgreSQL-version

  4. Essentials og brug af NOLOCK tip i SQL Server