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

Forskelle mellem INDEX, PRIMARY, UNIQUE, FULLTEXT i MySQL?

Forskelle

  • NØGLE eller INDEKS refererer til et normalt ikke-unik indeks. Ikke-distinkte værdier for indekset er tilladt, så indekset kan indeholde rækker med identiske værdier i alle kolonner i indekset. Disse indekser håndhæver ingen begrænsninger på dine data, så de bruges kun til adgang - for hurtigt at nå visse rækker af poster uden at scanne alle poster.

  • UNIKK henviser til et indeks, hvor alle rækker i indekset skal være unikke. Det vil sige, at den samme række muligvis ikke har identiske ikke-NULL-værdier for alle kolonner i dette indeks som en anden række. Ud over at blive brugt til hurtigt at nå bestemte registreringsintervaller, kan UNIQUE indekser bruges til at håndhæve begrænsninger på data, fordi databasesystemet ikke tillader, at reglerne for distinkte værdier brydes, når data indsættes eller opdateres.

    Dit databasesystem kan tillade, at et UNIKT indeks anvendes på kolonner, der tillader NULL-værdier, i hvilket tilfælde to rækker tillades at være identiske, hvis de begge indeholder en NULL-værdi (begrundelsen her er, at NULL anses for ikke at være lig med sig selv). Afhængigt af din ansøgning kan du dog finder dette uønsket:hvis du ønsker at forhindre dette, bør du ikke tillade NULL-værdier i de relevante kolonner.

  • PRIMÆR fungerer nøjagtigt som et UNIKT indeks, bortset fra at det altid hedder 'PRIMÆR', og der kan kun være én på en tabel (og der skal altid være én; selvom nogle databasesystemer ikke håndhæver dette). Et PRIMÆRT indeks er beregnet som et primært middel til entydigt at identificere enhver række i tabellen, så i modsætning til UNIQUE bør det ikke bruges på nogen kolonner, der tillader NULL-værdier. Dit PRIMÆRE indeks skal være på det mindste antal kolonner, der er tilstrækkeligt til entydigt at identificere en række. Ofte er dette kun én kolonne, der indeholder et unikt automatisk forøget nummer, men hvis der er noget andet, der unikt kan identificere en række, såsom "landekode" på en liste over lande, kan du bruge det i stedet.

    Nogle databasesystemer (såsom MySQL's InnoDB) gemmer en tabels poster på disken i den rækkefølge, som de vises i det PRIMÆRE indeks.

  • FULDTEKST indekser er forskellige fra alle ovenstående, og deres adfærd adskiller sig væsentligt mellem databasesystemer. FULLTEXT-indekser er kun nyttige til fuldtekstsøgninger udført med MATCH() / AGAINST()-sætningen, i modsætning til de ovenstående tre - som typisk implementeres internt ved hjælp af b-træer (som tillader valg, sortering eller intervaller, der starter fra venstre kolonne) eller hash-tabeller (giver mulighed for valg fra den venstre kolonne mest).

    Hvor de andre indekstyper er generelle, er et FULLTEXT-indeks specialiseret, idet det tjener et snævert formål:det bruges kun til en "fuldtekstsøgning".

Ligheder

  • Alle disse indekser kan have mere end én kolonne i dem.

  • Med undtagelse af FULLTEXT er kolonnerækkefølgen signifikant:for at indekset skal være nyttigt i en forespørgsel, skal forespørgslen bruge kolonner fra indekset, der starter fra venstre - den kan ikke kun bruge anden, tredje eller fjerde del af en forespørgsel. indeks, medmindre den også bruger de foregående kolonner i indekset til at matche statiske værdier. (For at et FULLTEXT-indeks skal være nyttigt for en forespørgsel, skal forespørgslen bruge alle kolonner i indekset.)



  1. SQL IN vs SQL EKSISTERER

  2. Definering af en en-til-en relation i SQL Server

  3. Hvordan sender jeg adgangskoden til pg_dump?

  4. MySQL dynamisk pivottabel