Nee, dat zal niet.
Theoretisch een index op (site, product, value, id)
heeft alles wat nodig is om een index te bouwen op een subset van deze velden (inclusief de indices op (product, value, id)
en (value, id)
).
Het bouwen van een index van een secundaire index wordt echter niet ondersteund.
Ten eerste, MySQL
ondersteunt geen snelle volledige indexscan (dat wil zeggen het scannen van een index in fysieke volgorde in plaats van logisch), waardoor een indextoegangspad duurder wordt dan het lezen van de tabel. Dit is geen probleem voor InnoDB
, aangezien de tabel zelf altijd geclusterd is.
Ten tweede zijn de recordvolgorde in deze indexen totaal verschillend, dus de records moeten toch worden gesorteerd.
Het grootste probleem met de snelheid waarmee de index wordt gemaakt in MySQL
is dat het de bestelling ter plaatse genereert (gewoon de records één voor één invoegen in een B-Tree
) in plaats van een voorgesorteerde bron te gebruiken. Zoals @Daniel al zei, lost snelle indexcreatie dit probleem op. Het is beschikbaar als plug-in voor 5.1
en is voorgeïnstalleerd in 5.5
.