Nie, nie będzie.
Teoretycznie indeks na (site, product, value, id)
ma wszystko, co jest wymagane do zbudowania indeksu na dowolnym podzbiorze tych pól (w tym indeksy na (product, value, id)
i (value, id)
).
Jednak budowanie indeksu z indeksu dodatkowego nie jest obsługiwane.
Najpierw MySQL
nie obsługuje szybkiego pełnego skanowania indeksu (czyli skanowania indeksu w kolejności fizycznej, a nie logicznej), przez co ścieżka dostępu do indeksu jest droższa niż odczyt tabeli. To nie jest problem dla InnoDB
, ponieważ sama tabela jest zawsze zgrupowana.
Po drugie, kolejność rekordów w tych indeksach jest zupełnie inna, więc rekordy i tak muszą być posortowane.
Jednak główny problem z szybkością tworzenia indeksu w MySQL
jest to, że generuje zamówienie na miejscu (wystarczy wstawić rekordy jeden po drugim do B-Tree
) zamiast używania wstępnie posortowanego źródła. Jak wspomniał @Daniel, szybkie tworzenie indeksów rozwiązuje ten problem. Jest dostępny jako wtyczka do 5.1
i jest preinstalowany w 5.5
.