Как работает стоимость запроса в плане выполнения?

Я пытаюсь увеличить производительность одного из моих запросов. Мой запрос состоит из 10 различных select .

Фактический производственный запрос выполняется 36 секунд.

Если я показываю план выполнения, для одного выбора у меня стоимость запроса составляет 18%.

Поэтому я изменяю предложение in (в этом выборе) с помощью XML-запроса (http://www.codeproject.com/KB/database/InClauseAndSQLServer.aspx).

Новый запрос теперь выполняется 28 секунд, но сервер sql сообщает мне, что указанный выше выбор имеет стоимость запроса 100%. И это единственное изменение, которое я сделал. И никакого параллелизма нет ни в одном запросе.

ПРОИЗВОДСТВО: 36 секунд, мой выбор 18% (остальные 10%).

НОВАЯ ВЕРСИЯ: 28 секунд, мой выбор 100% (остальные 0%).

Вы знаете, как сервер sql вычисляет эту «стоимость запроса»? (Я начинаю верить, что это случайно или что-то в этом роде).


person remi bourgarel    schedule 18.08.2011    source источник
comment
Не случайно, конечно; просто твоего понимания не хватает.   -  person duffymo    schedule 18.08.2011
comment
Спасибо за этот действительно интересный ответ, не могли бы вы улучшить мои знания, это цель моего вопроса.   -  person remi bourgarel    schedule 18.08.2011
comment


Ответы (1)


Стоимость запроса — это безразмерная мера комбинации циклов ЦП, памяти и дискового ввода-вывода.

Очень часто вы будете видеть операторов или планы с более высокой стоимостью, но более быстрым временем выполнения.

В первую очередь это связано с разницей в скорости трех вышеуказанных компонентов. ЦП и память довольно быстрые, а также редко бывают узкими местами. Если вы можете перенести некоторую нагрузку с дисковой подсистемы ввода-вывода на ЦП, запрос может показать более высокую стоимость, но должен выполняться значительно быстрее.

Если вы хотите получить более подробную информацию о выполнении ваших конкретных запросов, вы можете использовать:

SET STATISTICS IO ON
SET STATISTICS TIME ON

Это выведет подробную информацию о циклах процессора, создании плана и чтении страниц (как с диска, так и из памяти) на вкладку сообщений.

person JNK    schedule 18.08.2011
comment
Можно ли как-то посмотреть детализацию расходов? И есть ли способ увидеть время выполнения каждого выбора? Насколько это актуально? цель всего этого - улучшить время выполнения, нет? - person remi bourgarel; 18.08.2011
comment
Время не всегда является самым важным фактором, особенно в сценарии с общим хранилищем. Чтобы увидеть подробности, вы можете использовать параметры статистики, которые я упомянул в ответе. - person JNK; 18.08.2011