sybase - showplan значительно снижает расчетный ввод-вывод, добавляя еще одну таблицу в запрос

Применение запроса было изменено, но теория осталась прежней.

4 стола:

состояния - список состояний (индекс по состоянию) магазины - магазины и состояние, в котором они находятся (отдельные индексы по состоянию, магазину) store_orders - привязывает заказ к магазину (отдельные индексы по магазину, заказу) order_statuses - имеет порядок и статус (отдельные индексы по заказу, статусу)

Я хочу подсчитать, сколько заказов находится в каждом статусе для определенного штата.

Один запрос:

выберите os.order_status, count(os.order_status) из магазинов sto, store_order so, order_statuses os, где sto.state = 'PA' и sto.store = so.store и so.order = os.order group по os.order_status

в реальном приложении показанный здесь план показа возвращается с предполагаемым вводом-выводом около 500 000

Но если я сделаю:

выберите os.order_status, count(os.order_status) из состояний sta, store sto, store_order so, order_statuses os, где sta.state = 'PA', где sto.state = sta.state и sto.store = so.store и так далее. порядок = группа os.order по os.order_status

Количество операций ввода-вывода оценивается примерно в 2000, и все, что я сделал для изменения запроса, — это соединил таблицу состояний с таблицей магазинов и указал точное значение в состояниях, а не в хранилищах.

Разве DBM по-прежнему не придется выполнять тот же поиск хранилищ, независимо от того, укажу ли я явное значение или присоединюсь к другой таблице с этим явным значением?

Я пытаюсь понять, почему предполагаемый ввод-вывод намного выше.

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


person Lazy Bob    schedule 22.08.2009    source источник
comment
Демонстрационный план даст подробную информацию о том, что он делает, разве они не объясняют, почему IO отличается?   -  person mmmmmm    schedule 23.08.2009
comment
Я прошел через два плана показа, и все они используют одни и те же индексы, размеры страниц были одинаковыми и т. д. Единственная разница, которую я увидел, заключалась в дополнительной таблице и общем вводе-выводе. План sybase showplan показывает только общий ввод-вывод, а не отдельные операции из той или иной таблицы.   -  person Lazy Bob    schedule 23.08.2009


Ответы (1)


Ленивый Боб, не могли бы вы также включить статистику ввода-вывода, а затем добавить результаты к вопросу:

включить статистику io

showplan сам по себе не даст этой информации, как вы сообщили в комментариях

также, пожалуйста, опубликуйте точный рабочий запрос - в идеале, правильно отформатированный.

Ваш запрос говорит: «Где sta.state = 'PA', где sto.state = sta.state», и, очевидно, это не то, что вы могли бы запустить

person DVK    schedule 24.08.2009
comment
Спасибо ДВК... это была именно та команда, которая мне была нужна. После просмотра фактической статистики операций ввода-вывода оказалось, что, как и ожидалось, добавление дополнительной таблицы на самом деле приводит к увеличению затрат на операции ввода-вывода. - person Lazy Bob; 25.08.2009
comment
Хорошо, не могли бы вы распечатать точный вывод результатов ввода-вывода обоих запросов и планов запросов, чтобы понять, почему ввод-вывод падает при добавлении таблицы? (скорее всего меньше сканов какой-то большой таблицы) - person DVK; 26.08.2009