证券

多表连接时,为何走表扫描

图中Q2和Q3的关联字段有WHERE (Q3."LICE_DOC_STATUS" = '2') AND (Q3."REGIE_ID" = '000000000222222') AND (Q1."IF_USED" = '1')  AND (Q3."LICENSE_CODE" = Q2."LICENSE_CODE") AND (Q3."CUST_ID" = Q2."CUST_ID")这里连接实际返回结果集行数为0,为何会让Q2... 显示全部

tabscan.jpg


图中Q2和Q3的关联字段有
WHERE (Q3."LICE_DOC_STATUS" = '2') AND (Q3."REGIE_ID" = '000000000222222') AND (Q1."IF_USED" = '1')  AND (Q3."LICENSE_CODE" = Q2."LICENSE_CODE") AND (Q3."CUST_ID" = Q2."CUST_ID")



这里连接实际返回结果集行数为0,为何会让Q2表作为外表,不带条件的用TABSCAN呢?能调整吗?
附件是执行计划,非常感谢各位.



附件:

附件图标 tabscan_01.fmt (39.97 KB)

附件图标 db2batch_01.out (643.17 KB)

收起
参与31

查看其它 30 个回答xu5762173 的回答

xu5762173 xu5762173 数据库管理员 Ess
回复 12# leo


    王大师您好,非常感谢一直的跟进

按照您的建议,在测试环境重建了当前测试环境,目前Q2(rm_license),Q3(rm_license_apply)索引信息如下:
tab                           unqiue   columns
-------------------- ---------- --------------------------------------------------
RM_LICENSE           P          +LICENSE_CODE+REGIE_ID                           
RM_LICENSE           D          +CUST_ID+LICENSE_CODE   


-------------------- ---------- --------------------------------------------------
RM_LICENSE_APPLY     D          +REGIE_ID                                         
RM_LICENSE_APPLY     P          +APPLY_ID                                         
RM_LICENSE_APPLY     D          +CUST_ID+LICENSE_CODE  


$ db2 "runstats on table db2instt.rm_license_apply on all columns with distribution on all columns and sampled detailed indexes all "            
$ db2 "runstats on table db2instt.rm_license on all columns with distribution on all columns and sampled detailed indexes all "  


访问计划还是一样

QQ截图20130620154518.jpg

证券 · 2013-06-20
浏览343

回答者

xu5762173
数据库管理员 Ess
擅长领域: 服务器数据库存储
评论462

xu5762173 最近回答过的问题

回答状态

  • 发布时间:2013-06-20
  • 关注会员:0 人
  • 回答浏览:343
  • X社区推广