У меня есть несколько вопросов относительно производительности Microsoft SQL Server 2008, в основном о планах выполнения.
Согласно MSDN , хранимые процедуры имеют более высокую производительность по сравнению с прямыми запросами SQL, потому что:
База данных может подготавливать, оптимизировать и кэшировать план выполнения, чтобы впоследствии можно было повторно использовать план выполнения.
Мой первый вопрос: почему это так?дело.Ранее я читал, что при использовании параметризованных запросов (подготовленных операторов) план выполнения кэшируется для последующих выполнений с потенциально различными значениями (контекст выполнения).Будет ли хранимая процедура еще более эффективной?Если да, то план выполнения хранимой процедуры воссоздается только по требованию или он просто менее вероятен для удаления из кэша?Рассматривается ли параметризованный запрос как специальный запрос , означающий, что план выполнения с большей вероятностью будет удален из кэша?
Кроме того, поскольку я еще новичок в этой области, мне интересно, есть ли определенные команды, которые работают только в T-SQL.У меня есть запрос, который занимает ~ 12 секунд для выполнения при первом запуске, а затем ~ 3 секунды после этого, как в Microsoft SQL Management Studio, так и в ADO.NET.Предполагается, что запрос будет неэффективным в рамках моей презентации.Дело в том, что в моем запросе я использую CHECKPOINT
и DBCC DROPCLEANBUFFERS
согласно этой статье , а также OPTION (RECOMPILE)
.Тем не менее, по крайней мере, два первых, кажется, не имеют значения, так как запрос все равно займет 3 секунды.Я думаю, это связано с тем, что кэш данных не очищается.Любые идеи, почему кеш не очищается, или идеи о том, почему мой запрос значительно быстрее после первого выполнения?
Это вопросы, о которых я мог подумать.