Performance SQL Server 2008 R2查询性能缓慢
我有一个带有2个参数、4个左连接和一个orderby的查询。最近,该查询和其他查询开始需要很长时间(20秒到2½分钟)才能完成 根据一些关于回复缓慢的帖子,我做了以下几点:Performance SQL Server 2008 R2查询性能缓慢,performance,sql-server-2008,Performance,Sql Server 2008,我有一个带有2个参数、4个左连接和一个orderby的查询。最近,该查询和其他查询开始需要很长时间(20秒到2½分钟)才能完成 根据一些关于回复缓慢的帖子,我做了以下几点: 运行SP_UPDATESTATS–无明显效果 添加了选项(针对未知优化)-无明显效果 确保参数数据类型和数据库数据类型匹配–它们匹配 我自己决定在查询中用作参数、比较、联接或按顺序的所有表列上创建索引。创建索引在几分钟内显著提高了查询速度(1秒) 在ManagementStudio中进行了大量实验后,我发现查询的复杂性似
- 运行
–无明显效果SP_UPDATESTATS
- 添加了
-无明显效果选项(针对未知优化)
- 确保参数数据类型和数据库数据类型匹配–它们匹配
在ManagementStudio中进行了大量实验后,我发现查询的复杂性似乎并不重要,我删除了所有的左连接并得到了快速响应(搜索sql server参数嗅探,快速测试它添加
选项重新编译
发布执行计划。尝试引发查询的缓慢运行,并运行Adam Machanics sp_whoisactive。它显示查询当前正在等待什么。它是否显示IO或锁作为等待原因?这些外键列是否都在您的联接中正确索引?当速度较慢时,查看其他事务中的表是否有任何锁定。其他会话中是否有任何更新?看看sp_lock,这听起来像是执行计划中发生的事情。您是否可以尝试使用“带重新编译”执行存储过程?原因我认为是执行计划:您更改的所有内容都得到了更新短期性能提升将迫使sql server重新编译该存储过程的exec计划。
DECLARE @SN char(6)
DECLARE @Type int
SET @SN='LA2007'
SET @Type = 1
SELECT TOP 50
-4 AS tz, c.ID, c.Type, c.Name, c.DBAName, c.ContactName,
c.Addr1, c.Addr2, c.City, c.State, c.Zip, c.Zip4,
c.Email, c.Phone, c.Phone2, c.Phone3, c.FAX, c.WWW,
c.LastActivityOn, c.Description, c.IDNumber, ci.Prospect,
pi.Username, loc.LocationName AS xLocation,
lao.Name AS xLastActivityBy
FROM
Clients c
LEFT JOIN
CustomerInfo ci ON ci.ClientID = c.ID
LEFT JOIN
ProducerInfo pi ON pi.ProducerID = ci.CSR
LEFT JOIN
Locations loc ON loc.ID = c.LocationID
LEFT JOIN
Clients lao ON lao.ID = c.LastActivityBy
WHERE
c.SN = @SN AND c.Type = @Type
ORDER BY
c.LastActivityOn DESC, c.Name
--OPTION (OPTIMIZE FOR UNKNOWN)