Nej, det gör det inte.
Teoretiskt sett ett index på (site, product, value, id)
har allt som krävs för att bygga ett index på någon delmängd av dessa fält (inklusive indexen på (product, value, id)
och (value, id)
).
Men att bygga ett index från ett sekundärt index stöds inte.
Först, MySQL
stöder inte snabb full index scan (det vill säga att skanna ett index i fysisk ordning snarare än logiskt), vilket gör en indexåtkomstväg dyrare än tabellen som läses. Detta är inget problem för InnoDB
, eftersom själva tabellen alltid är klustrad.
För det andra är postordningarna i dessa index helt olika så posterna måste sorteras ändå.
Men det största problemet med indexskapningshastigheten i MySQL
är att den genererar beställningen på plats (bara att infoga posterna en efter en i ett B-Tree
) istället för att använda en försorterad källa. Som @Daniel nämnde, löser snabbt indexskapande detta problem. Det är tillgängligt som ett plugin för 5.1
och kommer förinstallerat i 5.5
.