Индекс на (A,B)
будет обрабатывать ваши случаи 1, 3 и 4.
Для случая 2, когда у вас есть запрос диапазона на A
, а также на B
, лучше иметьиндекс на (A)
и отдельный индекс на (B)
, и пусть база данных решит, что лучше всего подходит для запроса.Он может на лету решить, какой индекс будет более избирательным, основываясь на значениях в запросе.В этом случае MySQL будет использовать только один индекс, поэтому он выберет тот, который, по его мнению, даст ему наименьший набор строк для данного диапазона, а затем пройдет через эти строки, фильтруя по другому диапазону.
Поэтому для обработки всех упомянутых вами случаев я рекомендую индексы:
Индекс на (A,B)
можно использовать так же, как индекс только на (A)
всякий раз, когда базе данных требуется индекс только на (A)
, поэтому определение этих двух индексов аналогично наличию набора «все вышеперечисленное» (A)
, (B)
и (A,B)
.
Также обратите внимание, что если вы когда-нибудь захотите упорядочить по или сгруппировать по (B, A)
, вам понадобится индекс как (B,A)
, так и (A,B)
.Заказ важен!