Oracle sql性能优化定理
1、选择最有效率的表名顺序:ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。测试通过~
2、 WHERE子句中的连接顺序 性能优化 oracle sql
[解决办法]
你的第1条应该在10g之前是适用的吧
[解决办法]
顺序什么的确实重要
[解决办法]
2、 WHERE子句中的连接顺序
越有效筛选数据的条件放在越右边,连接表条件放在最左边
[解决办法]
前面我说的可能不太准确,我刚才测试了一下,11g下from 后表名的顺便不会影响查询的速度
贴出执行计划如下:
select count(1) from a;
已用时间: 00: 00: 00.09
执行计划
----------------------------------------------------------
Plan hash value: 3918351354
-------------------------------------------------------------------
[解决办法]
Id
[解决办法]
Operation
[解决办法]
Name
[解决办法]
Rows
[解决办法]
Cost (%CPU)
[解决办法]
Time
[解决办法]
-------------------------------------------------------------------
[解决办法]
0
[解决办法]
SELECT STATEMENT
[解决办法]
[解决办法]
1
[解决办法]
3 (0)
[解决办法]
00:00:01
[解决办法]
[解决办法]
1
[解决办法]
SORT AGGREGATE
[解决办法]
[解决办法]
1
[解决办法]
[解决办法]
[解决办法]
[解决办法]
2
[解决办法]
TABLE ACCESS FULL
[解决办法]
A
[解决办法]
4
[解决办法]
3 (0)
[解决办法]
00:00:01
[解决办法]
-------------------------------------------------------------------
Note
-----
- dynamic sampling used for this statement
统计信息
----------------------------------------------------------
4 recursive calls
0 db block gets
15 consistent gets
0 physical reads
0 redo size
419 bytes sent via SQL*Net to client
416 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
SQL> select count(1) from temp_a;
已用时间: 00: 00: 00.01
执行计划
----------------------------------------------------------
Plan hash value: 2773624539
---------------------------------------------------------------------
[解决办法]
Id
[解决办法]
Operation
[解决办法]
Name
[解决办法]
Rows
[解决办法]
Cost (%CPU)
[解决办法]
Time
[解决办法]
---------------------------------------------------------------------
[解决办法]
0
[解决办法]
SELECT STATEMENT
[解决办法]
[解决办法]
1
[解决办法]
9 (0)
[解决办法]
00:00:01
[解决办法]
[解决办法]
1
[解决办法]
SORT AGGREGATE
[解决办法]
[解决办法]
1
[解决办法]
[解决办法]
[解决办法]
[解决办法]
2
[解决办法]
TABLE ACCESS FULL
[解决办法]
TEMP_A
[解决办法]
16388
[解决办法]
9 (0)
[解决办法]
00:00:01
[解决办法]
---------------------------------------------------------------------
Note
-----
- dynamic sampling used for this statement
统计信息
----------------------------------------------------------
4 recursive calls
0 db block gets
63 consistent gets
0 physical reads
0 redo size
421 bytes sent via SQL*Net to client
416 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
SQL> select * from a,temp_a;
已选择65552行。
已用时间: 00: 00: 01.15
执行计划
----------------------------------------------------------
Plan hash value: 3066928336
-------------------------------------------------------------------------------
[解决办法]
Id
[解决办法]
Operation
------解决方案--------------------
Name
[解决办法]
Rows
[解决办法]
Bytes
[解决办法]
Cost (%CPU)
[解决办法]
Time
[解决办法]
-------------------------------------------------------------------------------
[解决办法]
0
[解决办法]
SELECT STATEMENT
[解决办法]
[解决办法]
65552
[解决办法]
3968K
[解决办法]
36 (3)
[解决办法]
00:00:01
[解决办法]
[解决办法]
1
[解决办法]
MERGE JOIN CARTESIAN
[解决办法]
[解决办法]
65552
[解决办法]
3968K
[解决办法]
36 (3)
[解决办法]
00:00:01
[解决办法]
[解决办法]
2
[解决办法]
TABLE ACCESS FULL
[解决办法]
A
[解决办法]
4
[解决办法]
124
[解决办法]
3 (0)
[解决办法]
00:00:01
[解决办法]
[解决办法]
3
[解决办法]
BUFFER SORT
[解决办法]
[解决办法]
16388
[解决办法]
496K
[解决办法]
33 (4)
[解决办法]
00:00:01
[解决办法]
[解决办法]
4
[解决办法]
TABLE ACCESS FULL
[解决办法]
TEMP_A
[解决办法]
16388
[解决办法]
496K
[解决办法]
8 (0)
[解决办法]
00:00:01
[解决办法]
-------------------------------------------------------------------------------
Note
-----
- dynamic sampling used for this statement
统计信息
----------------------------------------------------------
7 recursive calls
0 db block gets
81 consistent gets
0 physical reads
0 redo size
1232628 bytes sent via SQL*Net to client
48486 bytes received via SQL*Net from client
4372 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
65552 rows processed
SQL> select * from temp_a,a;
已选择65552行。
已用时间: 00: 00: 00.90
执行计划
----------------------------------------------------------
Plan hash value: 3066928336
-------------------------------------------------------------------------------
[解决办法]
Id
[解决办法]
Operation
[解决办法]
Name
[解决办法]
Rows
[解决办法]
Bytes
[解决办法]
Cost (%CPU)
[解决办法]
Time
[解决办法]
-------------------------------------------------------------------------------
[解决办法]
0
[解决办法]
SELECT STATEMENT
[解决办法]
[解决办法]
65552
[解决办法]
3968K
[解决办法]
36 (3)
[解决办法]
00:00:01
[解决办法]
[解决办法]
1
[解决办法]
MERGE JOIN CARTESIAN
[解决办法]
[解决办法]
65552
[解决办法]
3968K
[解决办法]
36 (3)
[解决办法]
00:00:01
[解决办法]
[解决办法]
2
[解决办法]
TABLE ACCESS FULL
[解决办法]
A
[解决办法]
4
[解决办法]
124
[解决办法]
3 (0)
[解决办法]
00:00:01
[解决办法]
[解决办法]
3
[解决办法]
BUFFER SORT
[解决办法]
[解决办法]
16388
[解决办法]
496K
[解决办法]
33 (4)
[解决办法]
00:00:01
[解决办法]
[解决办法]
4
[解决办法]
TABLE ACCESS FULL
[解决办法]
TEMP_A
[解决办法]
16388
[解决办法]
496K
[解决办法]
8 (0)
[解决办法]
00:00:01
[解决办法]
-------------------------------------------------------------------------------
Note
-----
- dynamic sampling used for this statement
统计信息
----------------------------------------------------------
7 recursive calls
0 db block gets
81 consistent gets
0 physical reads
0 redo size
1232628 bytes sent via SQL*Net to client
48486 bytes received via SQL*Net from client
4372 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
65552 rows processed
[解决办法]
楼上测试时有没有清除sql缓存?
