小编Mik*_*e B的帖子

为什么删除这些 LOWER 调用会像这样更改执行计划?

在对慢速查询进行故障排除时,我被实际执行计划误导了一段时间,它告诉我在查询的后期排序,应该有几行占用了 > 80% 的查询时间。当时查询是在存储过程中动态构建的,大部分缓慢是由参数嗅探引起的,但很长一段时间我试图弄清楚为什么对这些行进行排序需要这么长时间。

这是查询:

SELECT Id
 , FirstName
 , LastName
 , FullName
 , DateOfBirth
 , CityStateZip
 , DriversLicenseState
 , DriversLicenseNumber
FROM (SELECT c.EntityId Id
       , p.FirstName
       , p.LastName
       , p.FullName
       , c.DateOfBirth
       , c.UpdateDate
       , CityStateZip = CASE a.EntityAddressId
           WHEN NULL THEN NULL
           ELSE CONCAT(a.City, ', ', s.Code, ' ', a.Zip)
           END
       , ds.Value DriversLicenseState
       , dn.Value DriversLicenseNumber
       , ROW_NUMBER() OVER (
               PARTITION BY p.FirstName, p.LastName, c.DateOfBirth
                    , ds.Value, dn.Value 
               ORDER BY c.UpdateDate DESC) RowNum
  FROM Store.Customer c
  INNER …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2012

4
推荐指数
1
解决办法
234
查看次数

标签 统计

sql-server ×1

sql-server-2012 ×1