Производительность 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 и внешних ключей, но это наиболее распространенный сценарий.
Другие вопросы по тегам