我有一些我继承的 T-SQL (SQL Server 2008),并试图找出为什么一些查询运行得非常慢。在Actual Execution Plan
我有三个聚集索引扫描中,这花费了我 19%、21% 和 26%,所以这似乎是我的问题的根源。
字段的内容通常是数字(但有些工作编号有字母前缀)
数据库设计(供应商提供)非常糟糕。他们的应用程序中工作编号的最大长度为 12 个字符,但在连接的表中,它varchar(50)
在某些地方和varchar(15)
其他地方被定义为。我的参数是 a varchar(12)
,但如果我将其更改为 a ,我会得到同样的结果varchar(50)
该节点包含以下内容:
Predicate: [Live_Costing].[dbo].[TSTrans].[JobNo] as [sts1].[JobNo]=CONVERT_IMPLICIT(varchar(50),[@JobNo],0)
sts1
是派生表,但它从中提取的表jobno
是varchar(50)
我不明白为什么它在 2 个 varchars 之间进行隐式转换。仅仅是因为它们的长度不同吗?
我对执行计划相当陌生
有没有一种简单的方法来确定执行计划中的哪个节点与查询的哪个部分相关?是谓词,连接子句?
问候
标记