gpt4 book ai didi

sql-server - 我该如何优化这个查询?我必须对同一个表使用两个 INNER JOIN (SQL Server)

转载 作者:行者123 更新时间:2023-12-01 00:17:32 26 4
gpt4 key购买 nike

在这种情况下,有什么方法可以避免对同一个表执行两次 INNER JOIN?

    SELECT  B.CostCatCd As CostCatCd,
F.CountryDesc AS SenderCountry,
B.SenderCompanycd AS SenderCompanyCd,
D.CountryDesc As ReceivingCountry,
B.BillCompanycd AS ReceivingCompanyCd,
SUM(B.BillAmt) as Amount

FROM Bill B
INNER JOIN Company C
ON B.FY = C.FY
AND B.CycleCd = C.CycleCd
AND B.BillCompanyCd = C.CompanyCd
INNER JOIN Country D
ON B.FY = D.FY
AND B.CycleCd = D.CycleCd
AND C.CountryCd = D.CountryCd
INNER JOIN Company E
ON B.FY = E.FY
AND B.CycleCd = E.CycleCd
AND B.SenderCompanyCd = E.CompanyCd
INNER JOIN Country F
ON B.FY = F.FY
AND B.CycleCd = F.CycleCd
AND E.CountryCd = F.CountryCd

我正在尝试提高 SP 的性能,也许这是可以更新的内容。我对两个表(公司和国家/地区)都有同样的担忧。

提前致谢!

最佳答案

没有细节,给出建议不是那么简单,但你应该看看实际的查询计划和统计IO输出。这些可以很好地了解您的 SQL 发生了什么。

如果查询运行缓慢,您应该检查以下事项:

  • 具有最大逻辑读取的表
  • 查询计划中的扫描
  • 查询计划中发生大量行时的关键查找
  • 假脱机、排序、溢出到临时数据库

对于索引,它看起来是一个很好的索引候选者:

公司:CompanyCd、CycleCd、FY(+ CountryCd 作为包含列)

国家:CountryCd、CycleCd、FY(+ CountryDesc 作为包含列)

当然,一切都取决于行的更新频率,因为索引会(稍微)减慢这些速度,但猜测公司或国家/地区不会获得很多更新。我猜测了列的选择性,这就是索引中的列按该顺序排列的原因。

正确索引 Bill 也是一个好主意,但由于缺少 where 子句,因此无法提供任何建议。

关于sql-server - 我该如何优化这个查询?我必须对同一个表使用两个 INNER JOIN (SQL Server),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33219426/

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