Какой из них лучше, зависит от ваших реальных запросов.
Одна вещь, которую нужно понять, состоит в том, что, когда вы присоединяетесь к таблице sales
один раз в своем запросе, она будет использовать только один индекс для него (самое большее).Поэтому необходимо убедиться, что доступен индекс, наиболее подходящий для запроса.
Если вы присоединяете таблицу sales
всегда ко всем трем другим таблицам (customer
, product
и employee
) тогда предпочтительнее будет составной индекс, если предположить, что механизм фактически его использует и не будет выполнять сканирование таблицы.
Порядок полей в составном индексе важен, когда речь идет о порядкеРезультаты.Например, если ваш запрос собирается сгруппировать результаты по продукту (сначала), а затем заказать детали по каждому клиенту, вы можете воспользоваться индексом, в котором сначала указан идентификатор продукта, а во втором - идентификатор клиента.
Но может также оказаться, что механизм решит, что лучше сначала начать сканирование таблицы sales
, а затем объединить остальные три таблицы, используя соответствующие индексы первичного ключа.В этом случае не используется индекс, который существует в таблице sales
.
Единственный способ выяснить это - получить план выполнения вашего запроса и посмотреть, какие индексы будут использоваться, когда они будут определены.
Если у вас есть только один запрос к таблице sales
, вам не нужно иметь несколько индексов.Но, скорее всего, у вас есть несколько запросов, которые выдают совершенно разные результаты, с различными вариантами выбора полей, фильтрами, группировками и т. Д.запроса и другие для других.Обратите внимание, что то, что вы предлагаете, не является взаимоисключающим.Возможно, вы могли бы извлечь выгоду из нескольких составных индексов, которые просто имеют другой порядок полей.
Очевидно, что множество индексов будет замедлять изменения данных в этих таблицах, поэтому вам необходимо учитывать и этот компромисс.