在对慢速查询进行故障排除时,我被实际执行计划误导了一段时间,它告诉我在查询的后期排序,应该有几行占用了 > 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)