Приложение запроса было изменено, но теория та же.
4 таблицы:
states - список состояний (индекс по штату)
магазины - магазины и состояние, в котором они находятся (отдельные индексы состояния, магазина)
store_orders - привязывает заказ к магазину (отдельные индексы в магазине, заказ)
order_statuses - имеет заказ и статус (отдельные индексы по заказу, статусу)
Я хочу посчитать, сколько заказов в каждом статусе для определенного состояния.
Один запрос:
выберите os.order_status, count (os.order_status)
из магазинов sto, store_order так, order_statuses os
где sto.state = 'PA'
и sto.store = so.store
и так.order = os.order
группа по os.order_status
в реальном приложении, шоу-план возвращается с оценкой ввода-вывода около 500 000
Но если я сделаю:
выберите os.order_status, count (os.order_status)
из состояний sta, store sto, store_order так, order_statuses os
где sta.state = 'PA'
где sto.state = sta.state
и sto.store = so.store
и так.order = os.order
группа по os.order_status
Количество операций ввода-вывода оценивается примерно в 2000, и все, что я сделал, чтобы изменить запрос, - это соединить таблицу состояний с таблицей магазинов и указать точное значение в состояниях вместо магазинов.
Не будет ли СУБД по-прежнему выполнять тот же поиск хранилищ, указываю ли я явное значение или присоединяюсь к другой таблице с этим явным значением?
Я пытаюсь выяснить, почему предполагаемый ввод / вывод намного выше.
Я не администратор баз данных, но стараюсь учиться как можно больше, потому что я постоянно сталкиваюсь с такими вещами, и я никогда не до конца понимаю, почему.