sql >> Databasteknik >  >> RDS >> Mysql

Indexering för nyckeluppsättningspaginering i mysql

Jag har stött på det här problemet tidigare. Här är min analys av det.

  • Det förekommer i MySQL 5.7 och 8.0, men uppenbarligen inte i äldre versioner och inte i MariaDB.

  • "Lösningen" jag föredrar är att ändra indexen så här:

       INDEX(company_id)      -- DROP this
       INDEX(company_id, id)  -- ADD this
    

Även om indexet med 2 kolumner är teoretiskt identiskt med indexet med en kolumn för InnoDB (förutsatt id är PK`), verkar Optimizern ignorera detta faktum i vissa situationer .

Jag gillar också att uttryckligen lägga till PK när jag ser ett behov . Detta signalerar framtida läsare av schemat (inklusive jag själv) att vissa frågor drar nytta av att PK läggs till.

Jag har ännu inte hittat ett fall där "index merge intersect" är snabbare än ett motsvarande sammansatt index.

Jag ogillar att någonsin använda index-"tips" av rädsla för att datadistributionen kommer att förändras i framtiden och att mitt "tips" kommer att göra saken värre.



  1. Jämför MySQL och Java Time

  2. Ta bort en databaspostprofil (SSMS)

  3. Försöker göra LOAD DATA INFILE med REPLACE och AUTO_INCREMENT

  4. SQLite Listview onclick filter db för att öppna resulterar i ny aktivitet