sql >> Database >  >> RDS >> Mysql

Verschillen tussen INDEX, PRIMAIRE, UNIEKE, FULLTEXT in MySQL?

Verschillen

  • SLEUTEL of INDEX verwijst naar een normale niet-unieke index. Niet-afzonderlijke waarden voor de index zijn toegestaan, dus de index mag bevatten rijen met identieke waarden in alle kolommen van de index. Deze indexen leggen geen beperkingen op aan uw gegevens, dus worden ze alleen gebruikt voor toegang - om snel bepaalde reeksen records te bereiken zonder alle records te scannen.

  • UNIEK verwijst naar een index waarbij alle rijen van de index uniek moeten zijn. Dat wil zeggen dat dezelfde rij mogelijk niet identieke niet-NULL-waarden heeft voor alle kolommen in deze index als een andere rij. UNIQUE-indexen kunnen niet alleen worden gebruikt om snel bepaalde recordbereiken te bereiken, maar kunnen ook worden gebruikt om beperkingen op gegevens af te dwingen, omdat het databasesysteem niet toestaat dat de regel voor afzonderlijke waarden wordt overtreden bij het invoegen of bijwerken van gegevens.

    Uw databasesysteem kan toestaan ​​dat een UNIEKE index wordt toegepast op kolommen die NULL-waarden toestaan, in welk geval twee rijen identiek mogen zijn als ze beide een NULL-waarde bevatten (de redenering hier is dat NULL als niet gelijk aan zichzelf wordt beschouwd). Afhankelijk van uw toepassing kunt u echter mogelijk vindt dit onwenselijk:als u dit wilt voorkomen, moet u NULL-waarden in de relevante kolommen niet toestaan.

  • PRIMAIR werkt precies als een UNIEKE index, behalve dat deze altijd 'PRIMARY' wordt genoemd, en dat er slechts één op een tafel kan staan ​​(en daar moet wees altijd één; hoewel sommige databasesystemen dit niet afdwingen). Een PRIMARY index is bedoeld als primair middel om elke rij in de tabel op unieke wijze te identificeren, dus in tegenstelling tot UNIQUE mag deze niet worden gebruikt voor kolommen die NULL-waarden toestaan. Uw PRIMARY-index moet op het kleinste aantal kolommen staan ​​dat voldoende is om een ​​rij uniek te identificeren. Vaak is dit slechts één kolom met een uniek automatisch verhoogd nummer, maar als er iets anders is dat een rij uniek kan identificeren, zoals 'landcode' in een lijst met landen, kunt u die in plaats daarvan gebruiken.

    Sommige databasesystemen (zoals InnoDB van MySQL) slaan de records van een tabel op schijf op in de volgorde waarin ze in de PRIMARY-index verschijnen.

  • FULLTEXT indexen verschillen van al het bovenstaande en hun gedrag verschilt aanzienlijk tussen databasesystemen. FULLTEXT-indexen zijn alleen nuttig voor zoekopdrachten in volledige tekst die worden uitgevoerd met de MATCH() / AGAINST()-clausule, in tegenstelling tot de bovenstaande drie - die doorgaans intern worden geïmplementeerd met behulp van b-trees (waardoor selectie, sortering of bereiken kunnen worden gestart vanaf de meest linkse kolom) of hash-tabellen (waardoor selectie mogelijk is vanaf de meest linkse kolom).

    Waar de andere indextypen voor algemeen gebruik zijn, is een FULLTEXT-index gespecialiseerd, in die zin dat deze een beperkt doel dient:hij wordt alleen gebruikt voor een "full text search"-functie.

Overeenkomsten

  • Al deze indexen kunnen meer dan één kolom bevatten.

  • Met uitzondering van FULLTEXT is de kolomvolgorde significant:wil de index bruikbaar zijn in een query, moet de query kolommen uit de index gebruiken die van links beginnen - het kan niet alleen het tweede, derde of vierde deel van een index, tenzij het ook de vorige kolommen in de index gebruikt om statische waarden te matchen. (Om een ​​FULLTEXT-index bruikbaar te maken voor een zoekopdracht, moet de zoekopdracht alles gebruiken kolommen van de index.)



  1. Scalaire UDF-inlining in SQL Server 2019

  2. Verbinding maken met een database met Sequel Pro

  3. Controleer of de MySQL-tabel bestaat zonder de syntaxis select from te gebruiken?

  4. SQLite IN