rs.*_*rs. 6 sql t-sql sql-server sql-server-2005 sql-server-2008
示例查询:
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
Run Code Online (Sandbox Code Playgroud)
我有一个类似于上面的查询,当我在存储过程中使用它时,它无限期地运行而不提供任何输出.但如果我使用相同的查询,
SELECT * FROM table1 t1
INNER JOIN table2 t2 on t1.id = tr.id
WHERE t2.desc LIKE 'A%' -- notice no parameter here
Run Code Online (Sandbox Code Playgroud)
这在不到一秒的时间内执行.
我的table2有140K记录,table1有250K
知道什么可能导致运营商运行缓慢?
它在编译时不知道@param不会有前导通配符,因此当它编译批处理时,它会为您提供一个扫描而不是搜索的计划。
您可以尝试OPTION (RECOMPILE)或OPTION (FORCESEEK)(SQL Server 2008)看看它是否为您提供更好的计划。
| 归档时间: |
|
| 查看次数: |
257 次 |
| 最近记录: |