【问题标题】:SQL taking too much time for executing a querySQL 执行查询花费了太多时间
【发布时间】:2017-08-04 11:44:09
【问题描述】:

我正在使用以下查询来生成大约 7k 行的一些信息。但问题是查询花费了太多时间来完成仅 7k 行。我需要对其进行微调。

select mo.CardUId,mo.CarParkUId,mo.PersonUId,mo.CardType,mo.CardNr,pk.LastName            company_name,ab.Name carpark_name,
mo.ValidFrom,mo.ValidUntil,mo.LastTccTime,p.LastName    customerName,mo.GroupName, mo.Name,p.Type,
mo.LastTccNr,mo.DisplayableCardCarrierNrId serialnr,mo.BlacklistEntry,

mo.GroupNumber from Person p


LEFT outer join vwAllCards mo on p.PersonUId=mo.PersonUId
left outer join Person pk on pk.PersonUId=p.CompanyDepartmentUId
left outer join CarPark ab on ab.CarParkUId=mo.CarParkUId
where p.Type=0 and mo.Name is not null
order by p.LastName

【问题讨论】:

  • 您可以使用分析器自动调整它。你已经做到了吗?
  • 您使用任何索引吗?你检查过解释计划吗?
  • 不,我没有。
  • 什么是慢:选择还是插入?无论如何都需要实际的执行计划。
  • 也许您需要检查索引的碎片并重建它们。相信我,如果您的索引是零散的,它可能会产生巨大的负面影响。

标签: sql-server


【解决方案1】:

我使用 SQL Profiler 自动创建微调查询所需的索引。

  • 进入 SSMS (SQL Server Management Studio) -> 工具 -> SQL Server Profiler。

  • 单击连接,然后单击运行,开始一个新的跟踪。

  • 现在执行您的慢查询,以便分析器捕获并记录它。

  • 停止查询和文件 -> 保存。

  • 在菜单中,单击工具 -> 数据库引擎优化顾问。

  • 当它打开时单击连接,在工作负载中,选择文件,然后单击右侧的第一个按钮(双筒望远镜)。然后选择刚才保存的文件。

  • 现在选中数据库的复选框,然后单击“开始分析”按钮(在“查看”和“操作”菜单下方)。

  • 完成后,打开“操作”菜单,然后单击“应用建议”。

现在您应该有一个快速且经过微调的查询。

【讨论】:

  • 这是一个很好的建议,但请确保您不只是自动应用索引调整向导推荐的任何内容(或现在使用的任何名称)。主要问题是它会建议为您刚刚分析的任何特定查询建立索引,而不考虑可能正在访问同一表的任何其他查询。理想情况下,您应该始终仔细检查建议,以确保它对您的实际设置有意义。
【解决方案2】:

与 (nolock) 一起使用

来自Person p 的mo.GroupNumber with (nolock)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 2018-07-23
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多