Upload
lucy-greene
View
235
Download
2
Embed Size (px)
DESCRIPTION
Types of Indexes These are several types of index structures available to you, depending on the need: A B-tree index is in the form of a binary tree and is the default index type. A bitmap index has a bitmap for each distinct value indexed, and each bit position represents a row that may or may not contain the indexed value. This is best for low-cardinality columns. Types of Indexes The following are the most common forms of indexes: B-tree Bitmap A B-tree index has its key values stored in a balanced tree (B-tree), allowing for fast binary searches. A bitmap index has a bitmap for each distinct key value being indexed. Within each bitmap, there is a bit set aside for each row in the table being indexed. This allows for fast lookups when there are few distinct values; that is, the indexed column has low cardinality. An example of this is a gender indicator. It can have values of “M” and “F” only. So, there are only two bitmaps to search. For example, if a bitmap index were used for a phone_number column, there would be so many bitmaps to manage and search that it would be very inefficient. Use bitmap indexes for low-cardinality columns.
Citation preview
Indexes
22
22
IndexTable
KeyRow
pointer
… WHERE key = 22
Types of Indexes
These are several types of index structures available to you, depending on the need:– A B-tree index is in the form of a binary tree and is the
default index type.– A bitmap index has a bitmap for each distinct value
indexed, and each bit position represents a row that may or may not contain the indexed value. This is best for low-cardinality columns.
B-Tree Index
Index entry headerKey column lengthKey column valueROWID
Root
Branch
Leaf
Index entry
B-Tree Index
Structure of a B-tree indexAt the top of the index is the root, which contains entries that point to the next level in the index. At the next level are branch blocks, which in turn point to blocks at the next level in the index. At the lowest level are the leaf nodes, which contain the index entries that point to rows in the table. The leaf blocks are doubly linked to facilitate the scanning of the index in an ascending as well as descending order of key values.
Format of index leaf entriesAn index entry is made up of the following components:An entry header, which stores the number of columns and locking
informationKey column length-value pairs, which define the size of a column in the
key followed by the value for the column (The number of such pairs is a maximum of the number of columns in the index.)
ROWID of a row that contains the key values
Bitmap Indexes
<Blue, 10.0.3, 12.8.3, 1000100100010010100><Green, 10.0.3, 12.8.3, 0001010000100100000>
<Red, 10.0.3, 12.8.3, 0100000011000001001><Yellow, 10.0.3, 12.8.3, 0010001000001000010>
KeyStartROWID
EndROWID Bitmap
Table
Index
Block 10
Block 11
Block 12
File 3
Bitmap Indexes Structure of a bitmap indexA bitmap index is also organized as a B-tree, but the leaf node stores a bitmap for each key value instead of a list of ROWIDs. Each bit in the bitmap corresponds to a possible ROWID, and if the bit is set, it means that the row with the corresponding ROWID contains the key value.As shown in the diagram, the leaf node of a bitmap index contains the following:An entry header that contains the number of columns and lock infoKey values consisting of length and value pairs for each key columnStart ROWIDEnd ROWIDA bitmap segment consisting of a string of bits. (The bit is set when the
corresponding row contains the key value and is unset when the row does not contain the key value. The Oracle server uses a patented compression technique to store bitmap segments.)
Index Options– A unique index ensures that every indexed value is unique.CREATE UNIQUE INDEX emp1 ON EMP (ename);DBA_INDEXES. UNIQUENESS ‘UNIQUE’
– Bitmap index CREATE BITMAP INDEX emp2 ON EMP (deptno); DBA_INDEXES.INDEX_TYPE ‘BITMAP’
An index can have its key values stored in ascending or descending order.
CREATE INDEX emp3 ON emp (sal DESC);DBA_IND_COLUMNS.DESCEND ‘DESC’
Index Options– A composite index is one that is based on more than one column.CREATE INDEX emp4 ON emp (empno, sal);DBA_IND_COLUMNS.COLUMN_POSITION 1,2 …
– A function-based index is an index based on a function’s return value.
CREATE INDEX emp5 ON emp (SUBSTR(ename, 3, 4)); DBA_IND_EXPRESSIONS.COLUMN_EXPRESSION ‘SUBSTR …’
– A compressed index has repeated key values removed.CREATE INDEX emp6 ON emp (empno, ename, sal) COMPRESS 2; DBA_INDEXES.COMPRESSION ‘ENABLED’DBA_INDEXES.PREFIX_LENGTH 2
Creating Indexes
CREATE INDEX my_index ONemployees(last_name, first_name);
Table Types
•Related data from more than one table are stored together.
•Clustered table
•Data (including non-key values) is sorted and stored in a B-tree index structure.
•Index-organized table (IOT)
•Data is divided into smaller, more manageable pieces.
•Partitioned table
•Data is stored as an unordered collection (heap).
•Ordinary (heap-organized) table
•Description•Type
Heap
IOTPartitioned
Clustered
What Is a Partition and Why Use It?
•A partition is:– A piece of a “very large” table or index– Stored in its own segment– Used for improved performance and
manageability
RANGE PARTITION
CREATE TABLE eladasok ( szla_szam NUMBER(5), szla_nev CHAR(30), mennyiseg NUMBER(6), het INTEGER ) PARTITION BY RANGE ( het ) (PARTITION negyedev1 VALUES LESS THAN ( 13 )
TABLESPACE users, PARTITION negyedev2 VALUES LESS THAN ( 26 )
TABLESPACE example, PARTITION negyedev3 VALUES LESS THAN ( 39 )
TABLESPACE users )
DBA_PART_TABLESDBA_TAB_PARTITIONSDBA_TAB_SUBPARTITIONS
HASH PARTITION, LIST PARTITION
CREATE TABLE eladasok2 (szla_szam NUMBER(5), szla_nev CHAR(30), mennyiseg NUMBER(6), het INTEGER ) PARTITION BY HASH ( het ) (PARTITION part1 TABLESPACE users, PARTITION part2 TABLESPACE example, PARTITION part3 TABLESPACE users );
CREATE TABLE eladasok3 (szla_szam NUMBER(5), szla_nev CHAR(30), mennyiseg NUMBER(6), het INTEGER ) PARTITION BY LIST ( het ) (PARTITION part1 VALUES(1,2,3,4,5) TABLESPACE users, PARTITION part2 VALUES(6,7,8,9) TABLESPACE example, PARTITION part3 VALUES(10,11,12,13) TABLESPACE users ) ;
SUBPARTITIONS (RANGE-HASH)
CREATE TABLE eladasok4 (szla_szam NUMBER(5), szla_nev CHAR(30), mennyiseg NUMBER(6), het INTEGER ) PARTITION BY RANGE ( het )SUBPARTITION BY HASH (mennyiseg)SUBPARTITIONS 3 (PARTITION negyedev1 VALUES LESS THAN ( 13 )
TABLESPACE users, PARTITION negyedev2 VALUES LESS THAN ( 26 )
TABLESPACE example, PARTITION negyedev3 VALUES LESS THAN ( 39 )
TABLESPACE users );
Table accessby ROWID
Index-Organized Tables
•Regular table access IOT access
Non-key columnsKey column
Row header
Index-Organized Tablesand Heap Tables
– Compared to heap tables, IOTs:• Have faster key-based access to table data• Do not duplicate the storage of primary key values• Require less storage • Use secondary indexes and logical row IDs• Have higher availability because table reorganization does
not invalidate secondary indexes
Index-Organized Tables
CREATE TABLE cikk_iot ( ckod integer, cnev varchar2(20), szin varchar2(15), suly float, CONSTRAINT cikk_iot_pk PRIMARY KEY (ckod) )ORGANIZATION INDEXPCTTHRESHOLD 20 INCLUDING cnevOVERFLOW TABLESPACE users;
DBA_INDEXES index_type ‘IOT-TOP’ table_name ‘CIKK_IOT’DBA_TABLES.IOT_TYPE ‘IOT’ or ‘IOT_OVERFLOW’ DBA_TABLES.IOT_NAME ‘CIKK_IOT’ for overflow segment
Clusters
Clustered orders and order_item tables
Cluster Key(ORD_NO) 101 ORD_DT CUST_CD 05-JAN-97 R01
PROD QTYA4102 20A5675 19 W0824 10
102 ORD_DT CUST_CD 07-JAN-97 N45
PROD QTYA2091 11G7830 20 N9587 26
Unclustered orders and order_item tables
ORD_NO ORD_DT CUST_CD------ ------ ------
101 05-JAN-97 R01102 07-JAN-97 N45
ORD_NO PROD QTY ...----- ------ ------
101 A4102 20102 A2091 11102 G7830 20
102 N9587 26101 A5675 19101 W0824 10
Cluster TypesIndex Index
clusterclusterHash Hash
clustercluster
Hash functionHash function
Situations Where Clusters Are Useful
Criterion
Uniform key distribution
Evenly spread key values
Rarely updated key
Often joined master-detail tables
Predictable number of key values
Queries using equality predicate on key
Hash
X
X
X
X
X
Index
X
X
X
INDEX CLUSTER
CREATE CLUSTER personnel ( department_number NUMBER(2) ) SIZE 512;
CREATE TABLE emp_cl ( empno NUMBER PRIMARY KEY,ename VARCHAR2(30), job VARCHAR2(27), mgr NUMBER(4), hiredate DATE, sal NUMBER(7,2), comm NUMBER(7,2), deptno NUMBER(2) NOT NULL) CLUSTER personnel (deptno);CREATE TABLE dept_cl ( deptno NUMBER(2), dname VARCHAR2(9), loc VARCHAR2(9))CLUSTER personnel (deptno);CREATE INDEX idx_personnel ON CLUSTER personnel;
DBA_CLUSTERSDBA_CLU_COLUMNSDBA_TABLES.CLUSTER_NAME ‘PERSONNEL’
HASH CLUSTER
CREATE CLUSTER personnel1( department_number NUMBER ) SIZE 512 HASHKEYS 500 STORAGE (INITIAL 100K NEXT 50K);
CREATE CLUSTER personnel2 ( home_area_code NUMBER, home_prefix NUMBER ) HASHKEYS 20 HASH IS MOD(home_area_code + home_prefix, 101); CREATE CLUSTER personnel3 (deptno NUMBER) SIZE 512 SINGLE TABLE HASHKEYS 500;
DBA_CLUSTERSDBA_CLU_COLUMNSDBA_CLUSTER_HASH_EXPRESSIONS