纸上谈sql优化大表nl hj比较问题

[复制链接]
查看11 | 回复9 | 2013-12-9 14:13:35 | 显示全部楼层 |阅读模式
纸上谈sql优化大表nl hj比较问题
回复

使用道具 举报

千问 | 2013-12-9 14:13:35 | 显示全部楼层
最近在处理生产问题,遇到一个问题请教大家。
sql跑的慢,经查有一个大表十多亿数据,上面有一个高选择性id索引,现在sql是全表扫描,加hashjoin
我缩减了和它关联的表的数据量到120万,发现可以走id的nestloop,但是120万次nl加索引扫描,也是耗费不小,我跑了一下40min没有出来
回复

使用道具 举报

千问 | 2013-12-9 14:13:35 | 显示全部楼层
xgghxkhuang 发表于 2014-11-6 21:36
最近在处理生产问题,遇到一个问题请教大家。
sql跑的慢,经查有一个大表十多亿数据,上面有一个高选择性i ...

但是全表扫描有十亿的数据,hashjoin应该也很慢,一个索引扫描返回40条数据,
整个关联出来4千万数据
回复

使用道具 举报

千问 | 2013-12-9 14:13:35 | 显示全部楼层
xgghxkhuang 发表于 2014-11-6 21:38
但是全表扫描有十亿的数据,hashjoin应该也很慢,一个索引扫描返回40条数据,
整个关联出来4千万数据

每次主表nl加上索引扫描大概3毫秒,nl需要6小时
其实就120万次

回复

使用道具 举报

千问 | 2013-12-9 14:13:35 | 显示全部楼层
xgghxkhuang 发表于 2014-11-6 21:40
每次主表nl加上索引扫描大概3毫秒,nl需要6小时
其实就120万次

我的打算用分区并行管道函数就是Steven书中的做法,分多个扫瞄源头表然后关联,然后insert,通过多个把数据量分散开,用管道函数拆开,请问直接用并行是否更快?
回复

使用道具 举报

千问 | 2013-12-9 14:13:35 | 显示全部楼层
听着有些模糊。它的执行计划可以看看么
回复

使用道具 举报

千问 | 2013-12-9 14:13:35 | 显示全部楼层
是分区索引吗? 不是的话你NL索引范围扫描能并行么。。。120万次单块读还不如HASH全表走并行。 《======个人观点纯属扯淡
回复

使用道具 举报

千问 | 2013-12-9 14:13:35 | 显示全部楼层
能否想办法变成分区智能连接?
回复

使用道具 举报

千问 | 2013-12-9 14:13:35 | 显示全部楼层
全表扫描几亿?这种大表必须要有分区啊,之前一个项目,二级分区,总共有10亿数据,不过走分区剪裁也很快(exadata平台


回复

使用道具 举报

千问 | 2013-12-9 14:13:35 | 显示全部楼层
hash join要增大pga啊,返回行数很多,基本nl没有啥优势了
oracle有分区智能连接,partition wise join....
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行