我可以降低查询费用吗?
查看此查询的执行计划 - >查询2:查询成本(相对于批次):93%,唯一突出的是“哈希加入匹配(内部联合)成本:45%”
select t1.PrimaryKeyId, t1.AdditionalColumnId
from TableOne t1
join TableTwo t2 on t1.ForeignKeyId = t2.PrimaryKeyId
join TableThree t3 on t1.PrimaryKeyId = t3.ForeignKeyId
join TableFour t4 on t3.ForeignKeyId = t4.PrimaryKeyId
join TableFive t5 on t4.ForeignKeyId = t5.PrimaryKeyId
join TableSix t6 on t5.ForeignKeyId = t6.PrimaryKeyId
join TableSeven t7 on t6.ForeignKeyId = t7.PrimaryKeyId
join TableEight t8 on t7.ForeignKeyId = t8.PrimaryKeyId
join TableEight t9 on t8.ForeignKeyId = t9.PrimaryKeyId
where
t1.isdeleted = 0 and
t2.isdeleted = 0 and
t1.startdttm >= @Begin_Date and t1.startdttm < @End_Date and
t1.paymentbalance = 0 and
t8.pos_source_id in (select sit_source_id from @TableTen) and
t2.transTypeId = 1 and
t2.transitemtypeid in (1,7)
--- Table Counts
SELECT COUNT(*) FROM TableOne = 4014596
SELECT COUNT(*) FROM TableTwo = 5409514
SELECT COUNT(*) FROM TableThree = 552980
SELECT COUNT(*) FROM TableFour = 552976
SELECT COUNT(*) FROM TableFive = 4376
SELECT COUNT(*) FROM TableSix = 4376
SELECT COUNT(*) FROM TableSeven = 9
SELECT COUNT(*) FROM TableEight = 175
SELECT COUNT(*) FROM TableNine = 36098
SELECT COUNT(*) FROM @TableTen = 68
答案 0 :(得分:1)
我建议使用t1(isdeleted, paymentbalance, startddtm)
上的索引来满足where
子句。如果只需要t1
的几行,这将最有效。
哈希匹配非常有效。您可以改为进行索引查找。所以,也尝试这些索引:
t2(PrimaryKeyId, isdeleted, transtypeid, transittypeid)
t8(PrimaryKeyId, pos_source_id)
这些将阻止访问表的数据。索引“覆盖”了查询。