sql >> Database >  >> RDS >> Mysql

Is er een optimale methode om een ​​samengestelde MySQL-index te bestellen?

Als vuistregel wilt u in een index met meerdere kolommen dat de kolommen met de hoogste kardinaliteit, of met andere woorden, het hoogste aantal verschillende waarden, als eerste in de index komen.

Om nauwkeuriger te zijn, wilt u eerst de kolom met de minste overeenkomsten met uw zoekcriteria, zodat u het resultaat zo veel mogelijk kunt beperken, maar over het algemeen is dit hetzelfde als de hoogste kardinaliteit.

In uw voorbeeld wilt u dus dat de kolom met miljoenen verschillende waarden in de index staat vóór de kolom met slechts 6 verschillende waarden.

Ervan uitgaande dat u slechts één rij selecteert uit de miljoenen waarden, kunt u sneller meer rijen verwijderen.

Als u twee kolommen met vergelijkbare kardinaliteit overweegt, plaatst u de kleinere eerst (INTEGER kolommen voor VARCHAR kolommen) omdat MySQL ze sneller kan vergelijken en herhalen.

Een waarschuwing is dat als u selecteert met bereiken (bijv. WHERE datecol > NOW() ), dan wil je de bereikkolommen het meest naar rechts, en je kolommen met een enkele constante (bijv. WHERE id = 1 ) naar links. Dit komt omdat uw index alleen kan worden gebruikt om te zoeken en te ordenen tot het punt van de eerste bereikwaarde.




  1. ORA-00604 ORA-12705

  2. Varchar-probleem op Mysql 2147483647

  3. Hoe unieke beperking in MySQL af te dwingen?

  4. Werkmap gebruiken voor bronbeheerdatabase