我有一个语句,有三个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个字段分组,那还有什么好办法吗?
我严肃地追问:
这个表一共有18列,还好。不过系统用了半年后就有几十万行了。这个不是报表语句,所以没法下班后汇总,这是业务人员操作时要去查询的表,读取很频繁!请问有什么办法可以修改一下SQL语句(表结构我这边现在不好更改),让其效率更高点!