Не, няма да стане.
Теоретично, индекс на (site, product, value, id)
разполага с всичко необходимо за изграждане на индекс за всяко подмножество от тези полета (включително индексите на (product, value, id)
и (value, id)
).
Изграждането на индекс от вторичен индекс обаче не се поддържа.
Първо, MySQL
не поддържа бързо пълно сканиране на индекс (това е сканиране на индекс във физически ред, а не логически), като по този начин прави пътя за достъп до индекса по-скъп от прочетената таблица. Това не е проблем за InnoDB
, тъй като самата таблица винаги е групирана.
Второ, редовете на записите в тези индекси са напълно различни, така че записите все пак трябва да бъдат сортирани.
Основният проблем обаче е със скоростта на създаване на индекс в MySQL
е, че генерира поръчката на място (просто вмъкване на записите един по един в B-Tree
) вместо да използвате предварително сортиран източник. Както @Daniel спомена, бързото създаване на индекс решава този проблем. Предлага се като плъгин за 5.1
и се предлага предварително инсталиран в 5.5
.