gpt4 book ai didi

sql-server - SQL 查询永远耗时

转载 作者:行者123 更新时间:2023-12-02 12:41:07 25 4
gpt4 key购买 nike

我有这个网络应用程序工具,可以查询数据并将其显示在网格中。现在很多人都在使用它,所以它必须具有相当高的性能。

问题是,我需要通过联接添加几个额外的字段,现在查询需要很长时间才能运行。

如果我在 sql server 中运行以下查询:

select top 100 *
from bam_Prestatie_AllInstances p
join bam_Zending_AllRelationships r on p.ActivityID = r.ReferenceData
join bam_Zending_AllInstances z on r.ActivityID = z.ActivityID
where p.PrestatieZendingOntvangen >= '2010-01-26' and p.PrestatieZendingOntvangen < '2010-01-27'

这大约需要 35-55 秒,这太长了。因为这只是一小部分。

如果我删除两个日期检查之一,只需要 1 秒。如果我删除两个连接,也只需要 1 秒。

当我对此使用查询计划时,我可以看到 100% 的时间都花在 PrestatieZendingOntvangen 字段的索引上。如果我将此字段设置为索引,则不会发生任何变化。

有人知道该怎么做吗?

因为我的客户开始提示超时等问题。

谢谢

最佳答案

除了 bam_Prestatie_AllInstances.PrestatieZendingOntvangen 列上的索引的明显问题之外,还要检查您是否有外键列的索引:

  • p.ActivityID(表:bam_Prestatie_AllInstances)
  • r.ReferenceData(表:bam_Zending_AllRelationships)
  • r.ActivityID(表:bam_Zending_AllRelationships)
  • z.ActivityID(表:bam_Zending_AllInstance)

对外键字段建立索引可以帮助加快这些字段上的 JOIN 速度!

此外,正如已经提到的:尝试通过指定特定的字段列表来限制选择的字段 - 而不是使用 SELECT * - 特别是如果您连接多个表,而只是连接数量您选择的列数(乘以您选择的行数)可能会导致大量数据传输 - 如果您不需要所有这些列,那只是浪费带宽!

关于sql-server - SQL 查询永远耗时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2147209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com