not-null約束對執行計劃的影響
1,對null值的處理(group by,distinct,max/min)
SQL> select comm,count(*) from scott.emp
2 group by comm;
COMM COUNT(*)
---------- ----------
10
1400 1
500 1
300 1
0 1
SQL>
SQL> select distinct(comm) from scott.emp;
COMM
----------
1400
500
300
0
SQL>
SQL>
SQL> select max(comm),min(comm) from scott.emp;
MAX(COMM) MIN(COMM)
---------- ----------
1400 0
==>max/min過濾掉null值
2,not-null約束對查詢效率的影響
2.1建立測試用表,test包含not null約束,test_null無not null約束。
drop table test;
create table TEST
(
owner VARCHAR2(30) not null,
object_name VARCHAR2(30) not null,
object_type VARCHAR2(19) not null,
created DATE not null
);
insert into test
select owner,object_name,object_type,created
from all_objects;
commit;
create index idx_test_created on test(created);
create index idx_test_owner_oname on test(owner,object_type);
begin
dbms_stats.gather_table_stats(user,'TEST');
end;
/
--
drop table test_null;
create table TEST_null
(
owner VARCHAR2(30),
object_name VARCHAR2(30),
object_type VARCHAR2(19),
created DATE
);
insert into test_null
select * from test;
commit;
create index idx_test_null_created on test_null(created);
create index idx_test_null_owner_oname on test_null(owner,object_type);
begin
dbms_stats.gather_table_stats(user,'TEST_NULL');
end;
/
2.2 使用max函式
==>由於max/min過濾掉null值,雖然null值不在索引中維護,仍然可以使用索引查詢。
SQL> set autotrace trace
select max(created) from test;
Execution Plan
----------------------------------------------------------
Plan hash value: 1861302148
-----------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 8 | 2 (0)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | 8 | | |
| 2 | INDEX FULL SCAN (MIN/MAX)| IDX_TEST_CREATED | 50875 | 397K| 2 (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------
SQL> select max(created) from test_null;
Execution Plan
----------------------------------------------------------
Plan hash value: 4200498869
----------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 8 | 84 (3)| 00:00:02 |
| 1 | SORT AGGREGATE | | 1 | 8 | | |
| 2 | INDEX FULL SCAN (MIN/MAX)| IDX_TEST_NULL_CREATED | 50875 | 397K| | |
----------------------------------------------------------------------------------------------------
2.3使用distinct:
==>由於null值不在索引中維護,無not-null約束時,不能僅使用索引查詢。
SQL> select distinct owner,object_type from test;
Execution Plan
----------------------------------------------------------
Plan hash value: 2716672475
----------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 483 | 7245 | 48 (15)| 00:00:01 |
| 1 | HASH UNIQUE | | 483 | 7245 | 48 (15)| 00:00:01 |
| 2 | INDEX FAST FULL SCAN| IDX_TEST_OWNER_ONAME | 50875 | 745K| 42 (3)| 00:00:01 |
----------------------------------------------------------------------------------------------
select distinct owner,object_type from test_null;
233 rows selected.
Execution Plan
----------------------------------------------------------
Plan hash value: 2562509165
--------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 527 | 7905 | 90 (9)| 00:00:02 |
| 1 | HASH UNIQUE | | 527 | 7905 | 90 (9)| 00:00:02 |
| 2 | TABLE ACCESS FULL| TEST_NULL | 50875 | 745K| 84 (3)| 00:00:02 |
--------------------------------------------------------------------------------
SQL>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/18922393/viewspace-730469/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- cluster factor對執行計劃的影響
- 索引及排序對執行計劃的影響索引排序
- oracle cardinality對於執行計劃的影響Oracle
- Oracle優化案例-統計資訊對執行計劃的影響(十三)Oracle優化
- 實驗-資料分佈對執行計劃的影響.txt
- _complex_view_merging對執行計劃的影響View
- CLUSTERING_FACTOR影響執行計劃
- 引數Optimizer_index_cost_adj 對執行計劃的影響Index
- 【CURSOR】Oracle繫結變數、執行計劃對遊標的影響Oracle變數
- 收集統計資訊中的no_invalidate選項對執行計劃的影響
- 再說索引與Null值對於Hints及執行計劃的影響索引Null
- 不等號影響執行計劃的相關實驗
- 表挪動儲存空間後,對之上的sql的執行計劃的影響的探究SQL
- 約束Constraint引起CBO執行計劃變化一例AI
- try catch 對程式碼執行的效能影響
- db_file_multiblock_read_count引數對block讀取和執行計劃的影響BloC
- 【實驗】【外來鍵】小議外來鍵約束對應用程式的影響
- 執行緒數目對資料庫的影響執行緒資料庫
- 時區調整對job的執行時間的影響
- 影響執行計劃之oracle sql baseline與sql profile之互動OracleSQL
- 對一個執行計劃的疑問
- arraysize/TDU/SDU的設定對sql執行代價的影響SQL
- oracle 索引升降序及排序條件 對查詢計劃的影響Oracle索引排序
- MySQL選用可重複讀之前一定要想到的事情(執行計劃影響)MySql
- 執行計劃-1:獲取執行計劃
- 分析執行計劃優化SQLORACLE的執行計劃(轉)優化SQLOracle
- 獨家揭秘丨GreatSQL 的MDL鎖策略升級對執行的影響SQL
- 音樂對程式設計的影響程式設計
- 中美貿易談判對雲端計算行業的影響行業
- 淺析影響專案執行的因素
- 【執行計劃】Oracle獲取執行計劃的幾種方法Oracle
- 【Oracle】-【索引-HINT,執行計劃】-帶HINT的索引執行計劃Oracle索引
- 分析執行計劃最佳化SQLORACLE的執行計劃(轉)SQLOracle
- 執行計劃
- SQL的執行計劃SQL
- 執行計劃的理解.
- 淺析影響專案執行的因素(續)
- 雙下劃線開頭的記憶體引數對Oracle AMM行為的影響記憶體Oracle