Общото правило за индексите е да поставите един върху всяко поле, използвано в WHERE
или JOIN
клауза.
Като се има предвид това, има някои оптимизации, които можете да направите. Ако зНАЕТЕ че определена комбинация от полета е единствената, която някога ще бъде използвана в WHERE на конкретна таблица, тогава можете да създадете един ключ с много полета само за тези полета, напр.
INDEX (field1, field2, field5)
v.s.
INDEX (field1),
INDEX (field2),
INDEX (field5)
Индексът с много полета може да бъде по-ефективен в много случаи, вместо да се налага сканиране на множество индекси. Недостатъкът е, че индексът с множество полета може да се използва само ако въпросните полета действително се използват в клауза WHERE.
С вашите примерни заявки, тъй като element
и field_id
са и в трите индекса, може би е по-добре да ги разделите в техния собствен специален индекс. Ако това са променливи полета, тогава е по-добре да ги запазите като свой собствен специален индекс. напр. ако някога трябва да промените field_id
в насипно състояние, БД трябва да актуализира 3 различни индекса, v.s. актуализиране само на един специален.
Но всичко се свежда до сравнителен анализ – тествайте вашата конкретна настройка с различни настройки на индекса и вижте коя се представя най-добре. Правилата са удобни, но не работят в 100% от времето.