Bol*_*olu 1 sql sql-server performance sql-server-2008
编辑:没有结果DB1.dbo.TABLE_B有STRING_ID ='id009'或'id008'; STRING_ID是varchar(100)和不是唯一的.
EDIT2:两个查询的执行计划相同.
我在SQL Server 2008服务器上运行以下查询:
DECLARE @stringid nvarchar(10)
SET @stringid='id009'
SELECT * FROM DB1.dbo.TABLE_A
INNER JOIN DB1.dbo.TABLE_B
ON DB1.dbo.TABLE_A.ID=DB1.dbo.TABLE_B.ID
WHERE DB1.dbo.TABLE_B.STRING_ID=@stringid
ORDER BY DB1.dbo.TABLE_B.UID desc, DB1.dbo.TABLE_A.TIME desc
Run Code Online (Sandbox Code Playgroud)
此查询将花费10秒钟来获取结果(为空).
如果我更改此查询的第二行以使用任何其他值,例如
SET @stringid='id008'
Run Code Online (Sandbox Code Playgroud)
查询将立即获得结果(空结果).
更重要的是:如果我将查询更改为不使用变量,而只是传递值('id009'),如下所示:
SELECT * FROM DB1.dbo.TABLE_A
INNER JOIN DB1.dbo.TABLE_B
ON DB1.dbo.TABLE_A.ID=DB1.dbo.TABLE_B.ID
WHERE DB1.dbo.TABLE_B.STRING_ID='id009'
ORDER BY DB1.dbo.TABLE_B.UID desc, DB1.dbo.TABLE_A.TIME desc
Run Code Online (Sandbox Code Playgroud)
查询也会立即得到结果(空结果).
所以我的问题是为什么这个查询运行得如此之慢,变量设置为某个值?
您将var声明为nvarchar(10).确保TABLE_B.STRING_ID的数据类型相同,或者@stringid var与TABLE_B.STRING_ID具有相同的数据类型.如果类型不同并且发生隐式转换,即使具有不同的值,也可以解释延迟.
关于MSSQL类型转换的一些有用信息也在SQL Server隐式类型转换如何在这种情况下工作?
| 归档时间: |
|
| 查看次数: |
805 次 |
| 最近记录: |