Mysql
 sql >> Database >  >> RDS >> Mysql

Indicizzazione per impaginazione keyset in mysql

Ho riscontrato questo problema prima. Ecco la mia analisi.

  • Si verifica in MySQL 5.7 e 8.0, ma a quanto pare non nelle versioni precedenti e non in MariaDB.

  • La "soluzione" che preferisco è cambiare gli indici in questo modo:

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

Sebbene l'indice a 2 colonne sia teoricamente identico all'indice a una colonna per InnoDB (supponendo id è il PK`), l'Ottimizzatore sembra ignorare questo fatto in alcune situazioni .

Inoltre, mi piace aggiungere esplicitamente la PK quando ne vedo una necessità . Questo segnala ai futuri lettori dello schema (incluso me stesso) che alcune query traggono vantaggio dall'aggiunta della PK.

Devo ancora trovare un caso in cui "index merge intersect" sia più veloce di un indice composito equivalente.

Non mi piace mai usare i "suggerimenti" dell'indice per paura che la distribuzione dei dati cambi in futuro e il mio "suggerimento" peggiorerà le cose.