Performance SQL Server 2008 R2查询性能缓慢

Performance SQL Server 2008 R2查询性能缓慢,performance,sql-server-2008,Performance,Sql Server 2008,我有一个带有2个参数、4个左连接和一个orderby的查询。最近,该查询和其他查询开始需要很长时间(20秒到2½分钟)才能完成 根据一些关于回复缓慢的帖子,我做了以下几点: 运行SP_UPDATESTATS–无明显效果 添加了选项(针对未知优化)-无明显效果 确保参数数据类型和数据库数据类型匹配–它们匹配 我自己决定在查询中用作参数、比较、联接或按顺序的所有表列上创建索引。创建索引在几分钟内显著提高了查询速度(1秒) 在ManagementStudio中进行了大量实验后,我发现查询的复杂性似

我有一个带有2个参数、4个左连接和一个orderby的查询。最近,该查询和其他查询开始需要很长时间(20秒到2½分钟)才能完成

根据一些关于回复缓慢的帖子,我做了以下几点:

  • 运行
    SP_UPDATESTATS
    –无明显效果

  • 添加了
    选项(针对未知优化)
    -无明显效果

  • 确保参数数据类型和数据库数据类型匹配–它们匹配

我自己决定在查询中用作参数、比较、联接或按顺序的所有表列上创建索引。创建索引在几分钟内显著提高了查询速度(1秒)


在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)