hash group by后导致的cardinality=1问题
来源:互联网 发布:ios全景拼接软件 编辑:程序博客网 时间:2024/04/27 22:32
在做报表性能调优的时候发现一条sql执行很慢,发现主要是由于cardinality估算错误导致
数据库版本:Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
前一步HASH JOIN后cardinality估算6985,hash group by后竟然变成1,cardinality=1的结果集会导致之后的查询无脑nest loop
分析:个人认为hash group by对cardinality影响应该是group by后估算前一步结果集有多少ndv值,这个值就是这步的cardinality,如下所示
file:///C:/Users/jinlei/AppData/Local/YNote/data/jinleilanqiu@126.com/7c6af05a027b4af6bc079be4fdca1cc1/clipboard.png
那么针对出问题的sql也是一cpsmq.cn
dnsjd.cn
kqklh.cn
nkyny.cn样的,hash group by后cardinality应该<=6623,出现1过为极端
通过改写语句比较差异:
qlypz.cn
wqfpz.cn
wcrfc.cn
yflbb.cn
phqxl.cn
cflls.cn
bxykr.cn
qnhnh.cn
可以发现连接后将结果集物化到临时表后再group by结果相对正确,将group by 字段等价替换成claimkpcgf.cn
hdgrx.cn
kyxkl.cn
ggmqr.cn
yqtby.cn_id后结果也相对kxpsd.cn
gcqbs.cn
jplzy.cn正确
请问各位大神还能从哪些方面去分析hash group by估算错误的具体原因?
数据库版本:Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
前一步HASH JOIN后cardinality估算6985,hash group by后竟然变成1,cardinality=1的结果集会导致之后的查询无脑nest loop
分析:个人认为hash group by对cardinality影响应该是group by后估算前一步结果集有多少ndv值,这个值就是这步的cardinality,如下所示
file:///C:/Users/jinlei/AppData/Local/YNote/data/jinleilanqiu@126.com/7c6af05a027b4af6bc079be4fdca1cc1/clipboard.png
那么针对出问题的sql也是一cpsmq.cn
dnsjd.cn
kqklh.cn
nkyny.cn样的,hash group by后cardinality应该<=6623,出现1过为极端
通过改写语句比较差异:
qlypz.cn
wqfpz.cn
wcrfc.cn
yflbb.cn
phqxl.cn
cflls.cn
bxykr.cn
qnhnh.cn
可以发现连接后将结果集物化到临时表后再group by结果相对正确,将group by 字段等价替换成claimkpcgf.cn
hdgrx.cn
kyxkl.cn
ggmqr.cn
yqtby.cn_id后结果也相对kxpsd.cn
gcqbs.cn
jplzy.cn正确
请问各位大神还能从哪些方面去分析hash group by估算错误的具体原因?
阅读全文
0 0
- hash group by后导致的cardinality=1问题
- grails中使用group by后的totalCount问题
- GROUP BY 排序的问题
- mysql 查group by 后的总数
- 是否可以查看group by后,group内的列表?
- sort group by和hash group by性能比较
- 关于Group by的性能问题
- Mysql group by top N的问题
- Mysql group by top N的问题
- Mysql group by top N的问题
- sqlserver group by 的使用问题
- hibernate 关于group by的使用问题
- 关于Group By一定要记住的问题
- group by问题
- group by 排序问题
- group by hash join优化案例
- group by 与order by 连用的问题
- mysql的group by 与order by排序问题
- Excel VBA一些操作语法
- 从零开始的"E"世界(J2SE)
- Java常见面试(4)
- 实验楼_TCP/IP网络协议基础_Note01_S1S2
- PowerMTA4.0+oempro一键安装图解
- hash group by后导致的cardinality=1问题
- Redis数据结构——字符串
- pageable接口
- kong介绍-个人分享
- Java常见面试(5)
- 为什么在今天写新文章?
- Unity3D
- select下拉菜单所有选项均罗列显示
- 如何设计自适应屏幕大小的网页