一个关联查询,pg算出来cost,使用 Nested Loop cost 很低,然后使用了 Nested Loop。
但是其实跑起来,Hash Join 快多了
而且很夸张的那种,Hash Join 才0.3秒,Nested Loop 需要16秒
pg预估的cost,Nested Loop 是 1600,而 Hash Join是16000
所以默认选择了 Nested loop
我不明白怎么算的,求大师指点迷津
表统计信息什么的都是最新的
我把有问题的explain 贴出来,求大神帮忙指点迷津?
快速
Bitmap Index Scan on pk_dt_sm_mt_201501 (cost=0.00..5,357.58 rows=101,278 width=0) (actual time=102.208..102.208 rows=102,732 loops=1)
Index Cond: ((comp_cd = '0001'::bpchar) AND (tenpo_sm_kb = '0'::bpchar) AND (keijo_dt >= '201501'::bpchar) AND (keijo_dt <= '201512'::bpchar))
慢速
Index Scan using pk_dt_sm_mt_201501 on dt_sm_mt_201501 jiseki (cost=0.00..5,614.79 rows=1 width=193) (actual time=16.367..21.356 rows=1 loops=813)
Index Cond: ((comp_cd = '0001'::bpchar) AND (tenpo_sm_kb = '0'::bpchar) AND (syohin_cd = r_sitei_syohin.syohin_cd) AND (keijo_dt >= '201501'::bpchar) AND (keijo_dt <= '201512'::bpchar))
关于执行计划说的系统点的文章有吗?求推荐
HI,
你可以看一下costsize.c。
hash join 用了一些经验公式,所以不一定是最准确的。
这里重在 Bitmap Index Scan on pk_dt_sm_mt_201501 (cost=0.00..5,357.58 rows=101,278 width=0)
可能你要降低一下seq scan和random scan的成本因子。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。