sql >> Database >  >> RDS >> Mysql

Moeten we sorteerkolom, primaire sleutel op samengestelde index (MySQL) opnemen

Het antwoord hangt af van de engine die je gebruikt:

  • MyISAM - ID toevoegen aan index kan en zal waarschijnlijk helpen
  • InnoDB - Primaire sleutel maakt al deel uit van elke secundaire index, omdat innodb rijen in BTREE opslaat, gesorteerd op primaire sleutel en index moet primair zijn om naar de daadwerkelijke rij te verwijzen - in dat geval is het toevoegen ervan overbodig als het de laatste in de index is ( maar als u dit doet, wordt het niet twee keer toegevoegd, dus het zou de zaken niet erger moeten maken). In sommige gevallen wil je het misschien als niet-laatste toevoegen, of je hebt meerdere kolommen primair en je voegt enkele kolommen toe aan je index in een andere volgorde - er zou geen probleem moeten zijn, innodb zal de resterende kolommen van primair aan die index toevoegen, maar kan de eerder toegevoegde items gebruiken zonder ze te dupliceren)

Dus antwoorden:

  1. In InnoDB is het niet nodig, in MyISAM is het goed als je die sortering daadwerkelijk gebruikt, als je het niet gebruikt, maakt het toevoegen ervan die index alleen maar groter.
  2. Volgorde van kolommen in de tabeldefinitie en volgorde in index zijn aparte dingen, dus het is OK
  3. Ja, die index lijkt echt goed - maar je kunt jezelf controleren met UITLEG , is er een mogelijkheid van nog betere prestaties - "dekkingsindex ", maar dat brengt kosten met zich mee, dus tenzij de query kritisch is en ondermaats presteert, is het waarschijnlijk overkill.



  1. Updates van het Microsoft Access-team (juni 2017)

  2. MySQL verwijdert dubbele records maar houdt de laatste bij

  3. mysql-achtige prestatieverbetering

  4. Taken maken in de SQL Server Express-editie