기타 색인
53095 단어 인덱스
SQL> drop table t purge;
Table dropped.
SQL> create table t as select * from dba_objects;
Table created.
SQL> insert into t select * from t;
2314432 rows created.
SQL> update t set object_id=rownum;
4628864 rows updated.
SQL> commit;
SQL> select count(*) from t;
COUNT(*)
----------
4628864
-------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time |
-------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 19312 (8)| 00:03:52 |
| 1 | SORT AGGREGATE | | 1 | | |
| 2 | TABLE ACCESS FULL| T | 289M| 19312 (8)| 00:03:52 |
-------------------------------------------------------------------
Statistics
----------------------------------------------------------
65727 consistent gets
12258 physical reads
SQL> create index idx_t_1 on t(object_id);
Index created.
SQL> alter table t modify object_id not null;
Table altered.
SQL> set autotrace on SQL> select count(*) from t; | Id | Operation | Name | Rows | Cost (%CPU)| Time | ------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 2998 (1)| 00:00:36 | | 1 | SORT AGGREGATE | | 1 | | | | 2 | INDEX FAST FULL SCAN| IDX_T_1 | 5518K| 2998 (1)| 00:00:36 | ------------------------------------------------------------------------- Statistics ---------------------------------------------------------- 10865 consistent gets
SQL> create bitmap index idx_map_t on t(status);
Index created.
SQL> select count(*) from t;
COUNT(*) ---------- 4628864
SQL> select count(*) from t; | Id | Operation | Name | Rows | Cost (%CPU)| Time | ----------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 113 (0)| 00:00:02 | | 1 | SORT AGGREGATE | | 1 | | | | 2 | BITMAP CONVERSION COUNT | | 5518K| 113 (0)| 00:00:02 | | 3 | BITMAP INDEX FAST FULL SCAN| IDX_MAP_T | | | | Statistics ---------------------------------------------------------- 123 consistent gets
select * from t where col1=xxx and col2=xxx and col3=xxx and col4=xxx...
create table t
(id, gender not null,location not null,age not null,data) as
select rownum,
decode(ceil(dbms_random.value(0,2)),1,'M',2,'F') gender,
ceil(dbms_random.value(1,50)) location,
decode(ceil(dbms_random.value(0,3)),1,'child',2,'young',3,'middle_age',4,'old'),
rpad('*',20,'*')
from dual
connect by rownum<=100000;
set autotrace traceonly
SQL> select * from t where gender='M' and location in (1,10,30) and age='child';
658 rows selected.
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 671 | 31537 | 171 (1)| 00:00:03 |
|* 1 | TABLE ACCESS FULL| T | 671 | 31537 | 171 (1)| 00:00:03 |
1 - filter("GENDER"='M' AND ("LOCATION"=1 OR "LOCATION"=10 OR
"LOCATION"=30) AND "AGE"='child')
Statistics
----------------------------------------------------------
652 consistent gets
16290 bytes sent via SQL*Net to client
-- , ; 。oracle 。
SQL> create index idx_union on t(gender,location,age);
Index created.
SQL> select * from t where gender='M' and location in (1,10,30) and age='child';
658 rows selected.
Execution Plan
----------------------------------------------------------
Plan hash value: 306189815
------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 671 | 31537 | 6 (0)| 00:00:01 |
| 1 | INLIST ITERATOR | | | | | |
| 2 | TABLE ACCESS BY INDEX ROWID| T | 671 | 31537 | 6 (0)| 00:00:01 |
|* 3 | INDEX RANGE SCAN | IDX_UNION | 1 | | 5 (0)| 00:00:01 |
Statistics
----------------------------------------------------------
635 consistent gets
36405 bytes sent via SQL*Net to client
--
SQL> create bitmap index idx_gender on t(gender);
SQL> create bitmap index idx_age on t(age);
SQL> create bitmap index idx_loc on t(location);
SQL> select * from t where gender='M' and location in (1,10,30) and age='young';
657 rows selected.
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 622 | 29234 | 6 (0)| 00:00:01 |
| 1 | INLIST ITERATOR | | | | | |
| 2 | TABLE ACCESS BY INDEX ROWID| T | 622 | 29234 | 6 (0)| 00:00:01 |
|* 3 | INDEX RANGE SCAN | IDX_UNION | 1 | | 5 (0)| 00:00:01 |
------------------------------------------------------------------------------------------
3 - access("GENDER"='M' AND ("LOCATION"=1 OR "LOCATION"=10 OR "LOCATION"=30)
AND "AGE"='young')
Statistics
----------------------------------------------------------
637 consistent gets
36355 bytes sent via SQL*Net to client
SQL> create bitmap index idx_btid on t(id);
SQL> set autotrace traceonly
SQL> select count(*) from t;
| Id | Operation | Name | Rows | Cost (%CPU)| Time |
-------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 1675 (1)| 00:00:21 |
| 1 | SORT AGGREGATE | | 1 | | |
| 2 | TABLE ACCESS FULL| T | 1081K| 1675 (1)| 00:00:21 |--- :
Statistics
----------------------------------------------------------
6140 consistent gets
6051 physical reads
--
SQL> select /*+index(t,idx_btid)*/ count(*) from t;
| Id | Operation | Name | Rows | Cost (%CPU)| Time |
-----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 3563 (1)| 00:00:43 |
| 1 | SORT AGGREGATE | | 1 | | |
| 2 | BITMAP CONVERSION COUNT| | 1081K| 3563 (1)| 00:00:43 |
| 3 | BITMAP INDEX FULL SCAN| IDX_BTID | | | |
-----------------------------------------------------------------------------
Statistics
----------------------------------------------------------
3563 consistent gets
3494 physical reads
함수 인덱스:
SQL> create table t as select * from dba_objects;
SQL> create index idx_id on t(object_id);
SQL> create index idx_name on t(object_name);
SQL> create index idx_crt on t(created);
-- ,
SQL> select * from t where upper(object_name)='T';
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 12 | 2484 | 289 (1)| 00:00:04 |
|* 1 | TABLE ACCESS FULL| T | 12 | 2484 | 289 (1)| 00:00:04 |
--------------------------------------------------------------------------
Statistics
----------------------------------------------------------
1036 consistent gets
--
SQL> create index idx_fx on t(upper(object_name));
SQL> select * from t where upper(object_name)='T';
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 707 | 188K| 151 (0)| 00:00:02 |
| 1 | TABLE ACCESS BY INDEX ROWID| T | 707 | 188K| 151 (0)| 00:00:02 |
|* 2 | INDEX RANGE SCAN | IDX_FX | 283 | | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------------------
Statistics
----------------------------------------------------------
5 consistent gets
select * from t where object_id-10<30;--
set autotrace traceonly
set linesize 1000
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 12 | 2484 | 289 (1)| 00:00:04 |
|* 1 | TABLE ACCESS FULL| T | 12 | 2484 | 289 (1)| 00:00:04 |
--------------------------------------------------------------------------
select * from t where object_name like 'CLUS%';-- , :
select * from t where substr(object_name,1,4)='CLUS';
select * from t where created>=to_date('2010-10-02','YYYY-MM-DD') AND created<to_date('2010-10-03','YYYY-MM-DD')+1; -- sql
select * from t where trunc(created)>=to_date('2010-10-02','YYYY-MM-DD') and trunc(created)<=to_date('2010-10-03','YYYY-MM-DD');
-- :created :2011/12/7 22:18:33, trunc(created) :2011/12/7
색인 고전 사례:
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[SQL] - 인덱스의 내부 작동1. 균형 트리의 개념 노드 : 데이터가 저장되는 공간 루트 노드 : 노드의 가장 상위 노드 리프 노드 : 제일 마지막에 존재하는 노드 중간 노드 : 루트, 리프 중간에 끼인 노드 페이지 : MySQL에서 부르는 노...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.