什么是數據庫索引
在關系數據庫中,索引是一種與表有關的數據庫結構,它可以使對應於表的SQL語句執行得更快。
索引的作用相當於圖書的目錄,可以根據目錄中的頁碼快速找到所需的內容。
對於數據庫來說,索引是一個必選項,但對於現在的各種大型數據庫來說,索引可以大大提高數據庫的性能,以至於它變成了數據庫不可缺少的一部分。
索引原理
1. 若沒有索引,搜索某個記錄時(例如查找name='wish')需要搜索所有的記錄,因為不能保證只有一個wish,必須全部搜索一遍
2. 若在name上建立索引,oracle會對全表進行一次搜索,將每條記錄的name值哪找升序排列,然后構建索引條目(name和rowid),存儲到索引段中,查詢name為wish時即可直接查找對應地方
3.創建了索引並不一定就會使用,oracle自動統計表的信息后,決定是否使用索引,表中數據很少時使用全表掃描速度已經很快,沒有必要使用索引
索引使用
創建一個測試表
#創建一個測試表 create table cstable (id int,sex char(1),name char(10)); #插入5000萬行測試數據 begin for i in 1..50000000 loop insert into cstable values(i,'M','ljy'); end loop; commit; end; /
(1)單一索引
單一索引是指索引列為一列的情況,即新建索引的語句只實施在一列上。
#創建一個單一索引 create index cs_index1 on cstable(id); 注:對表的第一列(id)創建索引。 #查看某一行的數據 select id,sex,name from cstable where id=8888888; #創建索引前大約16.77秒,創建索引后查找大約0.366秒
(2)復合索引:基於多個列的索引
索引分離於表,作為一個單獨的個體存在,除了可以根據單個字段創建索引,也可以根據多列創建索引。
用戶可以在多個列上建立索引,這種索引叫做復合索引(組合索引)。復合索引的創建方法與創建單一索引的方法完全一樣。
Oracle要求創建索引最多不可超過32列。
create index cs_index2 on cstable(id,sex); 注:對表的列(sex,name)創建索引。 select id,sex,name from cstable order by id,sex; #創建索引前大約16.77秒,創建索引后查找大約39.366秒(不知道為啥)
(3)創建基於函數的索引
--在cstable表的name列上執行大小寫無關的搜索 CREATE INDEX upper_index3 ON cstable(UPPER(name)) SELECT * FROM cstable WHERE UPPER(name)='LJY'
(4)刪除和修改索引
a.重建索引:如果經常在索引列上執行DML操作,需要定期重建索引 ALTER INDEX cs_index1 REBUILD; b.刪除索引 DROP INDEX cs_index2;