這兩個查詢中哪一個更高效?哪種SQL查詢更高效?
SELECT *FROM Emp WHERE DeptNo<>20
SELECT *FROM Emp WHERE NOT Deptno=20
我的教練告訴我,第一次一個更有效,我明白其中的道理,但我怎麼能檢查這個使用Oracle 10g?他使用了一些命令來顯示消耗的CPU週期,但在Google搜索之後我找不到它們。
使用AUTOTRACE的輸出是相同的。
SQL> SELECT *FROM Emp
WHERE DeptNo<>20
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=3 Card=9 Bytes=333
)
1 0 TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=9 Bytes=
333)
Statistics
----------------------------------------------------------
1 recursive calls
0 db block gets
8 consistent gets
0 physical reads
0 redo size
1125 bytes sent via SQL*Net to client
508 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
9 rows processed
SQL> SELECT *FROM Emp
WHERE NOT Deptno=20
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=3 Card=9 Bytes=333
)
1 0 TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=9 Bytes=
333)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
8 consistent gets
0 physical reads
0 redo size
1125 bytes sent via SQL*Net to client
508 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
9 rows processed
我非常懷疑其中一個查詢的速度明顯快於另一個。一般來說, – Codo 2011-04-23 15:29:39
很大程度上取決於統計數據。儘管這似乎對所有人都是一樣的。 – Guru 2011-04-23 18:33:12
請注意如何有8個一致獲得?兩者都不是比其他更有效率。 – 2011-04-23 23:59:08