暂无图片
分区表groupby,sql优化问题
我来答
分享
hzdba
2019-07-31
分区表groupby,sql优化问题

一个20g的分区T表,运行一个查询语句如:select,列1,列2,列2,列3,sum(列4),count(列5) from T GROUP BY 列1,列2,列2,列3

需要运行15分钟,执行计划如下,有没有什么好优化办法,group by的列都是选择性小的列基数很低

Execution Plan

----------------------------------------------------------

Plan hash value: 3825200618

------------------------------------------------------------------------------------------------------------------

| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time | Pstart| Pstop |

------------------------------------------------------------------------------------------------------------------

| 0 | SELECT STATEMENT | | 74M| 9695M| | 4621K (1)| 15:24:14 | | |

| 1 | HASH GROUP BY | | 74M| 9695M| 11G| 4621K (1)| 15:24:14 | | |

| 2 | VIEW | VW_DAG_0 | 74M| 9695M| | 2362K (1)| 07:52:33 | | |

| 3 | HASH GROUP BY | | 74M| 6510M| 8282M| 2362K (1)| 07:52:33 | | |

| 4 | PARTITION RANGE ALL| | 74M| 6510M| | 790K (1)| 02:38:12 | 1 |1048575|

| 5 | TABLE ACCESS FULL | T | 74M| 6510M| | 790K (1)| 02:38:12 | 1 |1048575|

------------------------------------------------------------------------------------------------------------------

我来答
添加附件
收藏
分享
问题补充
6条回答
默认
最新
刘娣

这几个列建联合索引,最后可以加上一个,走index ffs的执行计划

暂无图片 评论
暂无图片 有用 0
打赏 0
刘娣

这几个列加上一个伪列创建联合索引,走index fast full scan的执行计划

暂无图片 评论
暂无图片 有用 0
打赏 0
hzdba

所有select的列建立一个联合索引吗,还是group by的列建立联合索引

暂无图片 评论
暂无图片 有用 0
打赏 0
文成

楼上的意思是 所有的select子句中的列都加成联合索引 

还可以是试试 如果分区键是包含在group中的某列 可以每个分区进行group 再进行union all

暂无图片 评论
暂无图片 有用 0
打赏 0
lastwinner

其实除了提升计算资源的使用(加并行),没有太好的办法,妥妥的全表扫描是跑不掉的。

多列索引并不一定合适,除非该查询就是该表上的主要业务。


如果分区键是包含在group中的某列,那么运行速度会相对更快一些,SQL并不需要调整。

暂无图片 评论
暂无图片 有用 0
打赏 0
hzdba

好的,我这边也试试加并行看看,多谢各位大佬指教

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏