seb*_*eid 0 performance sql-server query-performance
我有这个查询运行了很长时间
(@P0 nvarchar(4000))
select emaildmo0_.Id as Id7_
,emaildmo0_.CreatedDate as CreatedD2_7_
,emaildmo0_.EmailAddress as EmailAdd3_7_
,emaildmo0_.EmailType_Id as EmailType4_7_
,emaildmo0_.isPreferedEmail as isPrefer5_7_
,emaildmo0_.ProfileId as ProfileId7_
,emaildmo0_.UpdatedDate as UpdatedD6_7_
from dbo.Email emaildmo0_
where emaildmo0_.EmailAddress = @P0
Run Code Online (Sandbox Code Playgroud)
这是执行计划
我的第一个问题为什么是索引扫描而不是索引查找
ExecutionPlan.xml 中的这两行
<Warnings>
<PlanAffectingConvert ConvertIssue="Cardinality Estimate" Expression="CONVERT_IMPLICIT(nvarchar(255),[emaildmo0_].[EmailAddress],0)" />
<PlanAffectingConvert ConvertIssue="Seek Plan" Expression="CONVERT_IMPLICIT(nvarchar(255),[emaildmo0_].[EmailAddress],0)=[@P0]" />
</Warnings>
Run Code Online (Sandbox Code Playgroud)
你能帮我解释一下这个警告是什么意思吗?如果有任何建议来调整这个查询
这意味着应该定义参数以匹配基础列的数据类型 - 当前参数是 nvarchar(4000) 但它应该是 varchar (看起来像 255 但你应该检查表)。
这是否真的使您的查询变慢或导致错误的计划更难确定。但是使这两个定义匹配肯定不会使情况变得更糟。
如果您无法更改参数数据类型,要么获得更好的 ORM,要么作为最后的手段更改列。
归档时间: |
|
查看次数: |
294 次 |
最近记录: |