sql >> Databasteknik >  >> RDS >> Mysql

Skillnader mellan INDEX, PRIMÄR, UNIK, FULLTEXT i MySQL?

Skillnader

  • NYCKEL eller INDEX hänvisar till ett normalt icke-unikt index. Icke distinkta värden för indexet är tillåtna, så indexet kan innehåller rader med identiska värden i alla kolumner i indexet. Dessa index upprätthåller inga begränsningar för dina data så de används endast för åtkomst - för att snabbt nå vissa registerintervall utan att skanna alla poster.

  • UNIKT hänvisar till ett index där alla rader i indexet måste vara unika. Det vill säga, samma rad kanske inte har identiska icke-NULL-värden för alla kolumner i detta index som en annan rad. Förutom att användas för att snabbt nå vissa postintervall, kan UNIKA index användas för att tvinga fram begränsningar av data, eftersom databassystemet inte tillåter att regeln för distinkta värden bryts vid infogning eller uppdatering av data.

    Ditt databassystem kan tillåta att ett UNIKT index tillämpas på kolumner som tillåter NULL-värden, i vilket fall två rader tillåts vara identiska om de båda innehåller ett NULL-värde (motivet här är att NULL anses inte vara lika med sig själv). Beroende på din ansökan kan du dock kan finner detta oönskat:om du vill förhindra detta bör du inte tillåta NULL-värden i de relevanta kolumnerna.

  • PRIMÄR fungerar precis som ett UNIKT index, förutom att det alltid heter 'PRIMÄR', och det kan bara finnas en på ett bord (och det bör alltid vara en; även om vissa databassystem inte upprätthåller detta). Ett PRIMÄRT index är avsett som ett primärt sätt att unikt identifiera valfri rad i tabellen, så till skillnad från UNIQUE bör det inte användas på några kolumner som tillåter NULL-värden. Ditt PRIMÄRA index ska finnas på det minsta antalet kolumner som är tillräckligt för att unikt identifiera en rad. Ofta är detta bara en kolumn som innehåller ett unikt automatiskt inkrementerat nummer, men om det finns något annat som unikt kan identifiera en rad, till exempel "landskod" i en lista över länder, kan du använda det istället.

    Vissa databassystem (som MySQL:s InnoDB) kommer att lagra en tabells poster på disken i den ordning som de visas i det PRIMÄRA indexet.

  • FULLTEXT index skiljer sig från alla ovanstående, och deras beteende skiljer sig avsevärt mellan databassystem. FULLTEXT-index är endast användbara för fulltextsökningar gjorda med MATCH() / AGAINST()-satsen, till skillnad från de tre ovanstående - som vanligtvis implementeras internt med hjälp av b-träd (som tillåter val, sortering eller intervall från kolumnen längst till vänster) eller hashtabeller (som tillåter val från kolumnen längst till vänster).

    Där de andra indextyperna är allmänna, är ett FULLTEXT-index specialiserat, eftersom det tjänar ett snävt syfte:det används bara för en "fulltextsökning".

Likheter

  • Alla dessa index kan ha mer än en kolumn i sig.

  • Med undantag för FULLTEXT är kolumnordningen signifikant:för att indexet ska vara användbart i en fråga måste frågan använda kolumner från indexet som börjar från vänster - den kan inte använda bara den andra, tredje eller fjärde delen av en index, såvida det inte också använder föregående kolumner i indexet för att matcha statiska värden. (För att ett FULLTEXT-index ska vara användbart för en fråga måste frågan använda alla kolumner i indexet.)



  1. Kan inte binda argument vid index 2 eftersom indexet ligger utanför intervallet

  2. Oracle SQL för att ändra kolumntyp från nummer till varchar2 medan den innehåller data

  3. Hur man skapar utländsk nyckelbegränsning med ON DELETE CASCADE i SQL Server - SQL Server / TSQL Tutorial Del 80

  4. PostgreSQL vs. Oracle:skillnad i kostnader, användarvänlighet och funktionalitet