在这种情况下,有什么办法可以避免为同一张桌子做两次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的性能,也许这可能会更新。我对两个表(公司和国家)都有同样的担忧。
提前致谢!
答案 0 :(得分:2)
如果没有详细信息,提供建议并不是那么简单,但您应该查看实际的查询计划和统计IO输出。那些可以很好地了解你的SQL是怎么回事。
如果查询运行缓慢,您应该检查以下内容:
对于索引,它似乎是索引的一个很好的候选者:
公司:CompanyCd,CycleCd,FY(+ CountryCd as included column)
国家/地区:CountryCd,CycleCd,FY(+ CountryDesc as included column)
当然,一切都取决于行的更新频率,因为索引会缓慢(略微),但猜测公司或国家/地区不会获得更多更新。我猜测了列的选择性,这就是索引中列的顺序。
正确编制索引也是一个好主意,但由于缺少where子句,因此无法提供任何建议。