开发者社区> 问答> 正文

关于postgre 执行计划

一个关联查询,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))

关于执行计划说的系统点的文章有吗?求推荐

展开
收起
大鹏888 2016-01-31 21:18:27 3193 0
2 条回答
写回答
取消 提交回答
  • 菜鸟

    @digoal 从cost数字上面分析,Bitmap Index Scan 跟index scan有啥不一样,谢谢

    2019-07-17 18:27:26
    赞同 展开评论 打赏
  • 公益是一辈子的事, I am digoal, just do it. 阿里云数据库团队, 擅长PolarDB, PostgreSQL, DuckDB, ADB等, 长期致力于推动开源数据库技术、生态在中国的发展与开源产业人才培养. 曾荣获阿里巴巴麒麟布道师称号、2018届OSCAR开源尖峰人物.

    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的成本因子。

    2019-07-17 18:27:26
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
PolarDB NL2SQL: 帮助您写出准确、优化的SQL 立即下载
MySQL表和索引优化实战 立即下载
SQL Sever迁移PG经验 立即下载