首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何降低查询成本

如何降低查询成本
EN

Stack Overflow用户
提问于 2014-02-04 17:35:54
回答 1查看 5.1K关注 0票数 0

我能降低查询成本吗?

查看此查询->查询2的执行计划:查询成本(相对于批处理):93%,唯一突出的是“哈希连接匹配(内部连接)成本: 45%”。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-04 18:11:23

我建议对t1(isdeleted, paymentbalance, startddtm)进行索引,以满足where子句的要求。如果只需要来自t1的几行,这将是最好的。

哈希匹配非常有效。您可以代替索引查找。因此,还可以尝试以下索引:

代码语言:javascript
复制
t2(PrimaryKeyId, isdeleted, transtypeid, transittypeid)
t8(PrimaryKeyId, pos_source_id)

这将阻止访问表的数据。索引“覆盖”查询。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21559469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档