oracle 索引

索引是與表相關的一個可選結構
用以提高 SQL 語句執行的性能
減少磁盤I/O
使用 CREATE INDEX 語句創建索引
在邏輯上和物理上都獨立於表的數據
Oracle 自動維護索引
--聯想新華字典去理解記憶

--創建表並制定存儲的表空間
create table stu
(
sno number,
sname varchar2(20)
)
tablespace tsm;

--創建標準索引
create index index_student --index_student 索引名稱
on student(address) --索引關聯的表以及字段
tablespace tsm; --索引存放位置

--重建索引
ALTER INDEX index_student rebuild;

--刪除索引
drop index index_student;

--唯一索引
select * from emp;

--唯一索引確保在定義索引的列中沒有重複值
--Oracle 自動在表的主鍵列上創建唯一索引
--使用CREATE UNIQUE INDEX語句創建唯一索引
create unique index uq_index
on emp(ename)
--沒有加表空間的時候,默認的就是放置與表存放的位置相同

--組合索引
create index com_index
on emp(ename,job)
--基於多個字段創建的索引

--反向鍵索引
反向鍵索引反轉索引列鍵值的每個字節
通常建立在值是連續增長的列上,使數據均勻地分佈在整個索引上
創建索引時使用REVERSE關鍵字
create index rev_index
on emp (mgr) reverse;

alter index rev_index rebuild noreverse;

select empno,rowid from emp;

--位圖索引
位圖索引適合創建在低基數列上
位圖索引不直接存儲ROWID,而是存儲字節位到ROWID的映射
減少響應時間
節省空間佔用
create bitmap index bit_index
on emp(hiredate);

--索引組織表 ORGANIZATION INDEX
CREATE TABLE ind_org_tab (
vencode NUMBER(4) PRIMARY KEY,
venname VARCHAR2(20)
)
ORGANIZATION INDEX;

insert into ind_org_tab values(111,'aaa');
insert into ind_org_tab values(222,'bbb');
insert into ind_org_tab values(333,'ccc');
--基於主鍵查找,不是基於rowid查詢
select vencode,rowid from ind_org_tab;
普通表 索引組織表
ROWID 唯一地標識行 主鍵唯一地標識行
隱式的 ROWID 列 沒有隱式的 ROWID 列
基於 ROWID 的訪問 基於主鍵的訪問
順序掃描返回所有行 完全索引掃描返回所有行,並按主鍵順序排列
支持分區 不支持分區

--基於函數的索引
select * from emp;

create index lower_index
on emp(lower(ename));

--查詢索引
select * from USER_INDEXES;
--USER_IND_PARTITIONS - 用戶創建的分區索引的信息
select * from user_ind_partitions;
--USER_IND_COLUMNS 查看在哪些表的字段上面創建了索引
select * from user_ind_columns;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章