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

MySQL utilizza gli indici esistenti per creare nuovi indici?

No, non lo farà.

In teoria, un indice su (site, product, value, id) ha tutto il necessario per costruire un indice su qualsiasi sottoinsieme di questi campi (inclusi gli indici su (product, value, id) e (value, id) ).

Tuttavia, la creazione di un indice da un indice secondario non è supportata.

Innanzitutto, MySQL non supporta la scansione completa rapida dell'indice (ovvero la scansione di un indice in ordine fisico anziché logico), rendendo così un percorso di accesso all'indice più costoso della tabella letta. Questo non è un problema per InnoDB , poiché la tabella stessa è sempre raggruppata.

In secondo luogo, gli ordini dei record in questi indici sono completamente diversi, quindi i record devono essere comunque ordinati.

Tuttavia, il problema principale con la velocità di creazione dell'indice in MySQL è che genera l'ordine in loco (basta inserire i record uno per uno in un B-Tree ) invece di utilizzare una fonte preordinata. Come menzionato da @Daniel, la creazione rapida dell'indice risolve questo problema. È disponibile come plug-in per 5.1 e viene preinstallato in 5.5 .