示例查询:
CREATE PROCEDURE dbo.Test (@p varchar(10))
AS
DECLARE @param varchar(10)
SET @param = @p + '%'
SELECT * FROM table1 t1
INNER JOIN table2 t2 on t1.id = tr.id
WHERE t2.desc LIKE @param
我有一个类似于上面的查询,当我在存储过程中使用它时,它无限期地运行而不提供任何输出。但如果我使用相同的查询,
SELECT * FROM table1 t1
INNER JOIN table2 t2 on t1.id = tr.id
WHERE t2.desc LIKE 'A%' -- notice no parameter here
这在不到一秒的时间内执行。
我的table2有140K记录,table1有250K
任何想法可能导致操作员运行缓慢?
答案 0 :(得分:4)
在编译时它不知道@param
没有前导通配符,因此在编译批处理时,它会为您提供扫描而不是搜索的计划。
您可以尝试OPTION (RECOMPILE)
或OPTION (FORCESEEK)
(SQL Server 2008),看看它是否为您提供了更好的计划。