|
今天早上到后写了一个试验,环境是我的笔记本,9.2.0.1版本数据库
一个试验,推翻了biti和xzh2000的设想:
请看:
SQL> desc a
名称 是否为空? 类型
----------------------------------------- -------- ---------------------
OWNER VARCHAR2(30)
OBJECT_NAME VARCHAR2(128)
SUBOBJECT_NAME VARCHAR2(30)
OBJECT_ID NUMBER
DATA_OBJECT_ID NUMBER
OBJECT_TYPE VARCHAR2(18)
CREATED DATE
LAST_DDL_TIME DATE
TIMESTAMP VARCHAR2(19)
STATUS VARCHAR2(7)
TEMPORARY VARCHAR2(1)
GENERATED VARCHAR2(1)
SECONDARY VARCHAR2(1)
SQL> select index_name from user_indexes where table_name = 'A';
INDEX_NAME
------------------------------
IND_OBJECTID_A
IND_OBJECTID_A 是object_id列上的索引。再新建一个索引:
SQL> create index ind_createdate_a on a(created) tablespace
2 index_test;
索引已创建。
SQL> set timing on
SQL> select object_name from a where a.object_id = 30308 and
2 created between to_date('2005-01-10 00:00:00', 'yyyy-mm-dd hh24:mi:ss')
3 and to_date('2005-01-20 00:00:00', 'yyyy-mm-dd hh24:mi:ss');
已选择96行。
已用时间: 00: 00: 01.02
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'A'
2 1 INDEX (RANGE SCAN) OF 'IND_OBJECTID_A' (NON-UNIQUE)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
106 consistent gets
98 physical reads
0 redo size
1637 bytes sent via SQL*Net to client
569 bytes received via SQL*Net from client
8 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
96 rows processed
可以看出,执行计划使用的仍然是 object_id 字段上的索引 IND_OBJECTID_A。
不过,我尝试这样的查询:
SQL> select object_name from a where a.object_id = 30308 and
2 created = to_date('2005-01-16 10:46:46', 'yyyy-mm-dd hh24:mi:ss');
已选择96行。
已用时间: 00: 00: 00.01
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'A'
2 1 AND-EQUAL
3 2 INDEX (RANGE SCAN) OF 'IND_OBJECTID_A' (NON-UNIQUE)
4 2 INDEX (RANGE SCAN) OF 'IND_CREATEDATE_A' (NON-UNIQUE)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
315 consistent gets
2 physical reads
0 redo size
1637 bytes sent via SQL*Net to client
569 bytes received via SQL*Net from client
8 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
96 rows processed
SQL>
这次,执行计划使用了两个索引,并且使用了AND-EQUAL连接方法。 |
|