博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在PostgreSQL中,如何模拟Oracle的hint效果
阅读量:6180 次
发布时间:2019-06-21

本文共 2831 字,大约阅读时间需要 9 分钟。

Oracle 的SQL文,可以强制指定各种 hint。

但是在PostgreSQL中是不支持的。

其wiki 是这样说的:

We are not interested in implementing hints in the exact ways they are commonly implemented on other databases. Proposals based on "because they've got them" will not be welcomed. If you have an idea that avoids the problems that have been observed with other hint systems, that could lead to valuable discussion.

但是可以通过如下的postgresql.conf参数来调节:

# - Planner Method Configuration -#enable_bitmapscan = on#enable_hashagg = onenable_hashjoin = on#enable_indexscan = on#enable_indexonlyscan = on#enable_material = onenable_mergejoin = onenable_nestloop = on#enable_seqscan = on#enable_sort = on#enable_tidscan = on

对于我的查询:

explain select  dept.no_emps,emp.age from dept,emp where emp.name = dept.mgr and dept.dept_name = 'shoe';

如果 enable_hashjoin = on,其他也为on,则执行计划是:

postgres=# explain select dept.no_emps,emp.age from dept,emp where emp.name = dept.mgr and dept.dept_name = 'shoe';                            QUERY PLAN                            ------------------------------------------------------------------ Hash Join  (cost=19.30..45.07 rows=23 width=8)   Hash Cond: ((emp.name)::text = (dept.mgr)::text)   ->  Seq Scan on emp  (cost=0.00..21.30 rows=1130 width=42)   ->  Hash  (cost=19.25..19.25 rows=4 width=42)         ->  Seq Scan on dept  (cost=0.00..19.25 rows=4 width=42)               Filter: ((dept_name)::text = 'shoe'::text)(6 rows)postgres=#

如果 enable_hashjoin=off,其他为on,则执行计划是:

postgres=# explain select dept.no_emps,emp.age from dept,emp where emp.name = dept.mgr and dept.dept_name = 'shoe';                             QUERY PLAN                             -------------------------------------------------------------------- Merge Join  (cost=97.89..103.79 rows=23 width=8)   Merge Cond: ((dept.mgr)::text = (emp.name)::text)   ->  Sort  (cost=19.29..19.30 rows=4 width=42)         Sort Key: dept.mgr         ->  Seq Scan on dept  (cost=0.00..19.25 rows=4 width=42)               Filter: ((dept_name)::text = 'shoe'::text)   ->  Sort  (cost=78.60..81.43 rows=1130 width=42)         Sort Key: emp.name         ->  Seq Scan on emp  (cost=0.00..21.30 rows=1130 width=42)(9 rows)postgres=#

如果enable_hashjoin 为 off,而 enable_mergejoin也为 off,则执行计划为:

postgres=# explain select dept.no_emps,emp.age from dept,emp where emp.name = dept.mgr and dept.dept_name = 'shoe';                            QUERY PLAN                            ------------------------------------------------------------------ Nested Loop  (cost=0.00..108.36 rows=23 width=8)   Join Filter: ((dept.mgr)::text = (emp.name)::text)   ->  Seq Scan on emp  (cost=0.00..21.30 rows=1130 width=42)   ->  Materialize  (cost=0.00..19.27 rows=4 width=42)         ->  Seq Scan on dept  (cost=0.00..19.25 rows=4 width=42)               Filter: ((dept_name)::text = 'shoe'::text)(6 rows)postgres=#

 

转载地址:http://rkbda.baihongyu.com/

你可能感兴趣的文章
15、Spring Boot使用Druid和监控配置【从零开始学Spring Boot】
查看>>
Spring boot Security Disable security
查看>>
2017云栖大会大咖演讲PPT+视频官方资料合集来啦!
查看>>
今年全家福流行这样拍 华为手机的花式姿势上央视了
查看>>
从内到外无懈可击,努比亚Z17让你一见钟情!
查看>>
滴滴:按原计划恢复深夜出行服务 新版上线一键报警功能
查看>>
十年磨一剑 企业级互联网架构Aliware助力企业数字化转型
查看>>
一箱农村垃圾的“重生之旅”
查看>>
合江长江公路大桥飞燕式系杆拱桥首节主拱成功吊装
查看>>
中国气象局:2018年高温日数多 总的气候年景正常
查看>>
广西博物馆改扩建项目开工 将建设面向东盟文化交流窗口
查看>>
最新!2018年中国程序员薪资生活调查报告
查看>>
Google机器智能小组:使用机器学习进行设计时的7个步骤(下)
查看>>
[译] 最详细的 CSS 字符转义处理
查看>>
深入学习Kubernetes | 上海站
查看>>
K8S高级网络实战——CNI能否解决k8s网络模型缺陷
查看>>
Netflix推荐系统(Part Five)-国际化和本地化推荐
查看>>
微信开源的终端跨平台组件——Mars在移动网络的探索和实践
查看>>
项目需求讨论 — ConstraintLayout 详细使用教程
查看>>
Android技能树 — 动画小结
查看>>