SQL Query永远占用

WtF*_*dgE 2 sql-server datetime join

我有这个webapplication工具,它可以查询数据并在网格中显示它.现在很多人都使用它,所以它必须具有很高的性能.

问题是,我需要通过连接添加几个额外的字段,现在需要永远运行查询.

如果我在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'
Run Code Online (Sandbox Code Playgroud)

这需要大约35-55秒,这是太长了.因为这只是一个小的.

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

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

有人知道该怎么办?

因为我的客户开始抱怨超时等问题.

谢谢

mar*_*c_s 6

除了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 *- 特别是如果您连接多个表,只选择您选择的绝对列数(乘以您的行数) select)可以导致海量数据传输 - 如果你不需要所有这些列,那就是浪费带宽!