Производительность SQL - объединение и подвыборы
У меня есть три таблицы, которые имеют общее поле, которое НЕ является его идентификатором. Например:
dairy_warehouse
-dairyId (primary key)
-expiration_date
-other dairy related fields
frozen_food_warehouse
-frozenFoodId (primary key)
-expiration_date
-other frozen food related fields (not same as dairy related fields)
dry_goods_warehouse
-dryGoodsId (primary key)
-expiration_date
-other dry goods related fields (not same as frozen food or dairy fields)
Я пытаюсь создать отчет, в котором перечислены все элементы, срок действия которых истекает в следующем месяце. Я не думаю, что объединение будет работать, так как между тремя таблицами нет связи по внешнему ключу. В настоящее время я склоняюсь к добавлению индекса expiration_date и использованию объединения и трех вложенных элементов, но я обеспокоен тем, что это будет иметь ужасную производительность. Есть ли лучшее решение?
2 ответа
Использование объединения не повлияет на производительность, если каждый запрос попадает в индекс. Ваше предложение добавить индекс на expiration_date
это правильная вещь.
Внешнего ключа нет, потому что я бы сказал, что ни одна из записей не связана между таблицами.
Внешний ключ предназначен для ссылочной целостности - чтобы убедиться, что "дочерняя" таблица не может указать значение, которое не существует в "основной" таблице *. Внешние ключи сами по себе не ускоряют выполнение запроса SELECT. Вы думали, что добавление индекса для "expiration_date" должно привести к выполнению запроса.
- Существует множество других сценариев использования RI и внешних ключей, но это наиболее распространенный сценарий.