У меня есть напарник, который утверждает, что динамический SQL во многих ситуациях работает быстрее, чем статический SQL, поэтому я постоянно вижу DSQL повсюду.Помимо очевидных недостатков, таких как неспособность обнаружить ошибки до тех пор, пока они не запущены, и что их труднее читать, это точно или нет?Когда я спросил, почему он все время использует DSQL, он сказал:
Статический режим предпочтителен, когда он не будет препятствовать повторному использованию кеша, и динамический предпочтителен, когда статический будет препятствовать повторному использованию кеша, а повторное использование желательно..
Я спросил, почему статический SQL предотвращает повторное использование кэша, и он сказал:
Очевидно, что когда переменные передаются предикатам операторов, это может предотвратить повторное использование кэшем этого плана выполнения.где DSQL разрешит повторное использование кэша в хранимой процедуре.
Так, например:
select * from mytable where myvar = @myvar
Я не специалист по планам выполнения SQL Server, но это кажетсяиррационально для меня.Почему движок будет хранить статистику в операторе DSQL в хранимой процедуре, а не в статическом операторе SQL?