![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
问一个严肃的问题,关于oracle sum group by 分组字段多了以后的执行效率问题 10
我有一个语句,有三个sum()和15个分组字段,表中大概有30万行记录。我担心执行效率太差,所以跟踪了一下SQL_TRACE,请各位大侠帮忙分析分析!没建立索引前的分析:...
我有一个语句,有三个sum() 和15个分组字段,表中大概有30万行记录。我担心执行效率太差,所以跟踪了一下SQL_TRACE,请各位大侠帮忙分析分析!
没建立索引前的分析:
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.01 0.01 0 1 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 15 0.01 0.00 0 28 0 1483
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 17 0.03 0.02 0 29 0 1483
Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 72
Rows Row Source Operation
------- ---------------------------------------------------
1483 SORT GROUP BY (cr=28 pr=0 pw=0 time=2455 us)
1484 TABLE ACCESS FULL TEST (cr=28 pr=0 pw=0 time=40 us)
建立索引后
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 1 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 15 0.01 0.00 0 28 0 1483
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 17 0.01 0.01 0 29 0 1483
Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 72
Rows Row Source Operation
------- ---------------------------------------------------
1483 SORT GROUP BY (cr=28 pr=0 pw=0 time=3800 us)
1484 TABLE ACCESS FULL TEST (cr=28 pr=0 pw=0 time=42 us)
EXPLAIN PLAN 两者相同,都是 all_rows cost=9 cadinality=1484 bytes=1221332
请高手帮忙解释分析下执行计划和SQL_TRACE
另外,如果不用对15个字段分组,那还有什么好办法吗? 展开
没建立索引前的分析:
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.01 0.01 0 1 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 15 0.01 0.00 0 28 0 1483
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 17 0.03 0.02 0 29 0 1483
Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 72
Rows Row Source Operation
------- ---------------------------------------------------
1483 SORT GROUP BY (cr=28 pr=0 pw=0 time=2455 us)
1484 TABLE ACCESS FULL TEST (cr=28 pr=0 pw=0 time=40 us)
建立索引后
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 1 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 15 0.01 0.00 0 28 0 1483
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 17 0.01 0.01 0 29 0 1483
Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 72
Rows Row Source Operation
------- ---------------------------------------------------
1483 SORT GROUP BY (cr=28 pr=0 pw=0 time=3800 us)
1484 TABLE ACCESS FULL TEST (cr=28 pr=0 pw=0 time=42 us)
EXPLAIN PLAN 两者相同,都是 all_rows cost=9 cadinality=1484 bytes=1221332
请高手帮忙解释分析下执行计划和SQL_TRACE
另外,如果不用对15个字段分组,那还有什么好办法吗? 展开
4个回答
展开全部
我严肃的答:
1如果表的列太多,可以这样设计
表1 表2
id 列1...列100 id 列101...列200
如果行太多,可以这样设计
表1(2000年数据) 表2 (2001年数据)
2正确的加上索引,这个不是一句话说的清的。
3更新时候尽量小批量的查,比如查这个月的数据,再加上以前的汇总结果
4等到没人用数据库的时候才汇总,比如下班后,半夜等
1如果表的列太多,可以这样设计
表1 表2
id 列1...列100 id 列101...列200
如果行太多,可以这样设计
表1(2000年数据) 表2 (2001年数据)
2正确的加上索引,这个不是一句话说的清的。
3更新时候尽量小批量的查,比如查这个月的数据,再加上以前的汇总结果
4等到没人用数据库的时候才汇总,比如下班后,半夜等
追问
我严肃地追问:
这个表一共有18列,还好。不过系统用了半年后就有几十万行了。这个不是报表语句,所以没法下班后汇总,这是业务人员操作时要去查询的表,读取很频繁!请问有什么办法可以修改一下SQL语句(表结构我这边现在不好更改),让其效率更高点!
展开全部
sum不是瓶颈,关键在表和表之间的链接,过滤条件如何设置,还有就是过滤条件的位置
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我严肃答:
1表列太多样设计
表1
表2
id
列1...列100
id
列101...列200
行太多样设计
表1(2000年数据)
表2
(2001年数据)
2正确加上索引句说清
3更新时候尽量小批量查比查月数据再加上前汇总结
4等没人用数据库时候才汇总比下班半夜等
1表列太多样设计
表1
表2
id
列1...列100
id
列101...列200
行太多样设计
表1(2000年数据)
表2
(2001年数据)
2正确加上索引句说清
3更新时候尽量小批量查比查月数据再加上前汇总结
4等没人用数据库时候才汇总比下班半夜等
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询