索引与值对及执行计划的物业
由于B*Tree索引不存储Null值,所以在索引字段允许为空的情况下,某些Oracle查询不会使用索引.
很多时候,我们看似可以使用全索引扫描(Full Index Scan)的情况,可能Oracle就会因为Null值的存在而放弃索引.
在此情况下即使使用Hints,Oracle也不会使用索引,其根本原因就是因为Null值的存在.
我们看以下测试.
在username字段为Not Null时,Index Hints可以生效.
SQL create table t as select username,password from dba_users;
Table created.
SQL desc t
Name Null? Type
----------------------------------------- -------- ----------------------------
USERNAME NOT NULL VARCHAR2(30)
PASSWORD VARCHAR2(30)
SQL create index i_t on t(username);
Index created.
SQL set autotrace trace explain
SQL select * from t where username=\'EYGLE\';
Execution Plan
----------------------------------------------------------
Plan hash value:
--------------------------------------------------------------------------
厂家是爱理不理的 Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time
--------------------------------------------------------------------------
0 | SELECT STATEMENT | | 1 | 34 | 2 (0)| 00:00:01
* 1 | TABLE ACCESS FULL| T | 1 | 34 | 2 (0)| 00:00:01
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter(\"USERNAME\"=\'EYGLE\')
Note
-----
- dynamic sampling used for this statement
SQL set linesize 120
SQL select /*+ index(t,i_t) */ * from t where username=\'EYGLE\';
Execution Plan
----------------------------------------------------------
Plan hash value:
------------------------------------------------------------------------------------
Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time
------------------------------------------------------------------------------------
0 | SELECT STATEMENT | | 1 | 34 | 2 (0)| 00:00:01
1 | TABLE ACCESS BY INDEX ROWID| T | 1 | 34 | 2 (0)| 00:00:01
* 2 | INDEX RANGE SCAN | I_T | 1 | | 1 (0)| 00:00:01
------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access(\"USERNAME\"=\'EYGLE\')
Note
-----
- dynamic sampling used for this statement
当索引字段允许为Null时,Oracle放弃此索引:
SQL alter table t modify (username null);
Table altered.
SQL select /*+ index(t,i_t) */ * from t;
Execution Plan
----------------------------------------------------------
Plan hash value:
--------------------------------------------------------------------------
Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time
--------------------------------------------------------------------------
0 | SELECT STATEMENT | | 27 | 918 | 2 (0)| 00:00:01
1 | TABLE ACCESS FULL| T | 27 | 918 | 2 (0)| 00:00:01
--------------------------------------------------------------------------
Note
-----
- dynamic sampling used for this statement
当该字段为Not Null时,索引可以被强制使用:
SQL alter table t modify (username not null);
Table altered.
SQL select /*+ index(t,i_t) */ * from t;
Execution Plan
----------------------------------------------------------
Plan hash value:
------------------------------------------------------------------------------------
Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time
------------------------------------------------------------------------------------
0 | SELECT STATEMENT | | 27 | 918 | 2 (0)| 00:00:01
1 | TABLE ACCESS BY INDEX ROWID| T | 27 | 918 | 2 (0)| 00:00:01
2 | INDEX FULL SCAN | I_T | 27 | | 1 (0)| 00:00:01
------------------------------------------------------------------------------------
Note
-----
- dynamic sampling used for this statement
这就是Null值对于索引及查询的影响.
查看本文来源
钦州哪家治疗白癜风医院好长春哪医院治疗妇科好
宏济堂小儿消食片
- 上一页:索尼经典仍售千元高价
- 下一页:索引与值对于及执行计划计划
-
工作中,不必合作的四种同事,合作的越多越容易吃亏
共同共赢基本上是现在公司内部;也普遍存在的现象了,而且大家共同不仅可...
2024-05-20
-
王晶67岁生日全家福曝光,被妻子挽着手臂太甜蜜,小女儿容貌出众
5月3日,舒淇,最小的姐姐叔叔秉,罕见地在她的个人社交账户上展示了一张...
2024-04-03
-
赏美文丨周家窗口 作者:余秋雨 诵读:王卉
您的浏览器不背书此音频格式 作者:余秋雨 诵读:王卉 一 上半年冬天,丈...
2024-02-18
-
护理人员情商课:时机若未成熟,暂且不言,反之则求道得助,终能成事
本文名副其实:求复任如武林,兼复任不只是为了还债,所谓上来说道,兼复...
2024-02-10
-
华杰专硕第四届大湾区MBA名校大联展在深圳圆满举办!
六年初夏日炎炎,MBA应考们也在热火朝天地取用里!2023高等院校MBA入学措施...
2024-01-23
-
装修,别抱“侥幸心理”,避开这6个点,要新颖更得安全
作为一般的有钱,买的房子都太大,所以改行建工程的时候很多人为了就让家...
2024-01-19