Производительность SQL - объединение и подвыборы - PullRequest
0 голосов
/ 08 декабря 2011

У меня есть три таблицы с общим полем, которое НЕ является его идентификатором. Например:

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 ]

2 голосов
/ 08 декабря 2011

Использование объединения не повлияет на производительность, если каждый запрос попадает в индекс. Ваше предложение добавить индекс на expiration_date является правильным решением.

Внешнего ключа нет, потому что я бы сказал, что ни одна из записей не связана между таблицами.

0 голосов
/ 08 декабря 2011

Внешний ключ предназначен для ссылочной целостности - чтобы убедиться, что «дочерняя» таблица не может указать значение, которое не существует в «основной» таблице *. Внешние ключи сами по себе не ускоряют выполнение запроса SELECT. Вы думали, что добавление индекса для "expiration_date" должно привести к выполнению запроса.

  • Существует множество других сценариев использования RI и внешних ключей, но это наиболее распространенный сценарий.
...