求助!动态语句的效率问题
在存储过程里面使用动态语句,其中
@SortID,@ArticleID是变量,
语句A:
SELECT ArticleID,Title,SortID FROM Article WHERE SortID=@SortID AND ArticleID <@ArticleID ORDER BY ArticleID DESC
与语句B:
EXEC "SELECT ArticleID,Title,SortID FROM Article WHERE SortID= "+@SortID+ " AND ArticleID < "+@ArticleID+ " ORDER BY ArticleID DESC "
那种执行效率更高?A语句会不会导致索引用不上?
请大虾们指点!!
------解决方案--------------------让我们在查询分析器中比较一下三条语句
select 1
exec ( 'select 1 ')
exec sp_executesql N 'select 1 '
1 执行计划完全是一模一样的;
2 跟踪结果
TEXT Event Class
select 1 SQL:StmtCompleted
select 1 SQL:StmtCompleted
exec ( 'select 1 ') SQL:StmtCompleted
select 1 SQL:StmtCompleted
exec sp_executesql N 'select 1 ' SQL:StmtCompleted
虽然从表面上看,或者从单条语句看,直接执行sql语句比exec或者sp_executesql的效率高,但是我觉得这是片面的;如果只是一条非常简单的sql语句,例如select name from student,效率都差不多的,3这不同之处基本可以忽略不计的;但是如果select name from student where id=?,在系统中的影响就有差别了,应该说sp_executesql的稍微好一些,不需要重新编译的,这个可以在系统运行时,使用时间探查器观察在存储过程中是否有未被重复使用的sql语句
个人观点,期待高手精彩回答!