什麼是索引
在關係型資料庫中,索引是一種單獨的、物理的對資料庫表中一列或多列的值進行排序的一種儲存結構,它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的資料頁的邏輯指標清單。索引的作用相當於圖書的目錄,可以根據目錄中的頁碼快速找到所需的內容。
索引是為了加速對錶中資料行的檢索而建立的一種分散的儲存結構。索引是針對表而建立的,它是由資料頁面以外的索引頁面組成的,每個索引頁面中的行都會含有邏輯指標,以便加速檢索物理資料。
索引型別有哪些
根據資料庫的功能,可以在資料庫設計器中建立4三種索引:
主鍵索引、唯一索引、普通索引、全文索引、空間索引。
主鍵索引:加速查詢 + 列值唯一(不可以有null)+ 表中只有乙個
唯一索引unique:加速查詢 + 列值唯一(可以有null)
普通索引normal:僅加速查詢
全文索引fulltext:對文字的內容進行分詞,進行搜尋
空間索引spatial:空間索引。
【單列索引:單個列上面建的索引
聯合索引:多列值組成乙個索引,專門用於組合搜尋,其效率大於多個單列索引合併】
oracle索引方法有哪些
oracle目前主要有下邊幾種索引方法:
b-tree:b-樹索引,就是一種將索引值按一定的演算法,存入乙個樹形的資料結構中(二叉樹),每次查詢都是從樹的入口root開始,依次遍歷node,獲取leaf。這是mysql裡預設和最常用的索引方法。
hash:由於hash的唯一(幾乎100%的唯一)及類似鍵值對的形式,很適合作為索 引,但效率不高。
位圖索引(bitmap index):位圖索引特定於該列只有幾個列舉值的情況,比如性別字段,標示字段比如只有0和1的情況。
分割槽索引和全域性索引:這2個是用於分割槽表的時候。前者是分區內索引,後者是全表索引
基於函式的索引:比如經常對某個欄位做查詢的時候是帶函式操作的,那麼此時建乙個函式索引就有價值了。
反向索引(reverse):這個索引不常見,但是特定情況特別有效,比如乙個varchar(5)位欄位(員工編號)含值
什麼情況需要建立索引(索引是建立在資料庫表中的某些列的上面的)
在主鍵、唯一鍵、外來鍵的列上;
在經常需要搜尋的列上,也就是where條件後的;
在經常需要排序的列上,也就是order by後的;
在經常需要分組的列上,也就是group by後的;
在經常需要根據範圍進行搜尋的列上,因為索引已經排序,其指定的範圍是連續的;
什麼情況不需要建立索引
在查詢中很少使用的列;
在查詢中參考的列不應該建立索引,(比如name名字);
對於那些只有很少資料值的列也不應該增加索引,(比如age年齡、***性別);
當修改操作遠遠多於檢索操作時,這個列不應該建立索引;
對於那些定義為text, image和bit資料型別的列不應該增加索引;
索引的優點缺點分別是
優點:1.大大加快資料的檢索速度;
2.建立唯一性索引,保證資料庫表中每一行資料的唯一性;
3.加速表和表之間的連線;
4.在使用分組和排序子句進行資料檢索時,可以顯著減少查詢中分組和排序的時間。
缺點:1.索引需要佔物理空間。
2.當對表中的資料進行增加、刪除和修改的時候,索引也要動態的維護,降低了資料的維護速度。
什麼情況索引會失效
1.如果條件中有or,即使其中有條件帶索引,只要有其他條件不是索引的會失效(這也是為什麼盡量少用or的原因,解決辦法是把or的所有條件都建乙個索引)
比如:select * from student where id=『***』 or name=』;其中id是索引,name不是索引,會失效。
2.對於聯合索引,不是使用的第一部分,索引會失效(少查不會失效,跳空查詢會失效)
3.like查詢是以%開頭的,會失效
比如:select * from student where id like 『%***』 ;其中id是索引,會失效。
4.如果列型別是字串,那一定要在條件中將資料使用引號引用起來,否則不使用索引。
比如:select * from student where id =1008; 其中id是索引,會失效。
比如:select * from student where id =『1008』 ;其中id是索引,不會失效。
建立索引語句
單獨建立索引:
例如create unique index 索引的名字 on 表名(表的某一列列名);
例如create index 索引的名字 on 表名(表的某一列列名);
例如create index 索引的名字 on 表名(列名1,列名2);
建立表的時候指定索引:
例如create table tablename ( […], unique 索引的名字 (表的某一列列名) );
修改表:
例如alter table 表名 add unique 索引的名字 (表的某一列列名);
修改索引語句
alter index 舊索引名字 rename to 新索引名
刪除索引語句
drop index 索引名
查詢索引的語句
select * from user_indexs;(當前使用者下所有索引)
select * from user_indexs where table_name=『***』; (查詢某個表的所有索引,表名要大寫)
select * from user_indexs where index_name=『***』;(查詢具體的索引,索引名要大寫)
注意事項
考慮已在表上建立的索參數量。最好避免在單個表上有很多索引。
建議單張表,包含唯一索引在內最好不要超過3個索引。
Oracle資料庫索引
標籤 資料庫 oracle 索引index 2013 06 14 16 54 4148人閱讀收藏 舉報 database 6 目錄 索引基本概念 索引的作用 索引的架構 oracle索引的型別 1 基於函式的索引 2 位圖索引 oracle索引的實現 索引是用於加速資料訪問的資料物件,合理的使用索引...
Oracle資料庫 索引
索引通過指標的形式提高資料查詢的速度。如果乙個資料量比較大的資料庫經常被查詢而插入刪除的次數較少,則應該建立索引,相反,小表或經常被插入或修改,則不建議建立索引。1.建立索引 create index emp phone number ix on employees phone number 2.建...
Oracle資料庫 索引
索引是定義在儲存表基礎之上,有助於無需檢查所有記錄而快速定位所需記錄的一種輔助儲存結構,由一系列儲存在磁碟上的索引項 index entries 組成,每個索引項又由兩部分構成 索引字段 由table中某些列 通常是一列 中的值串接而成,索引中通常儲存了索引欄位的每乙個值 也有例外 索引字段類似於詞...