Почему SQL может выполняться быстрее на SQL Server 2000, если НЕ используется хранимая процедура? - PullRequest
1 голос
/ 15 апреля 2010

Я не вижу ничего плохого в плане выполнения. Кроме того, насколько я понимаю, SQL Server 2000 расширил многие преимущества производительности хранимых процедур для всех операторов SQL, распознавая новые операторы T-SQL по сравнению с операторами T-SQL существующих планов выполнения (сохраняя планы выполнения для всех операторов SQL в кеш процедур, а не только планы выполнения хранимых процедур)

Это довольно простой оператор SELECT с разумными объединениями таблиц, без включенных транзакций или ссылками на связанные серверы в запросе и с табличными подсказками WITH (NOLOCK). Хранимая процедура была создана dbo, и у пользователя есть все необходимые разрешения.

Так что мой вопрос таков:

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

1 Ответ

2 голосов
/ 15 апреля 2010

Может думать о двух возможных причинах:

  • Хранимая процедура может использовать устаревший план выполнения. Если вы удалите и заново создадите хранимую процедуру, план ее выполнения будет перекомпилирован.
  • Хранимая процедура оптимизирована для общего случая. Если вы выполняете запрос с конкретными значениями, SQL Server может найти лучший план выполнения только для этих значений. Если это так, то добавление OPTION (OPTIMIZE FOR UNKNOWN) к версии без процедуры должно замедлить работу.
...