索引是對資料庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問資料庫表中的特定資訊。資料庫索引好比是一本書前面的目錄,能加快資料庫的查詢速度。
例如這樣乙個查詢:select * from table1 whereid=44。如果沒有索引,必須遍歷整個表,直到id等於44的這一行被找到為止;有了索引之後(必須是在id這一列上建立的索引),直接在索引裡面找44(也就是在id這一列找),就可以得知這一行的位置,也就是找到了這一行。可見,索引是用來定位的。
可見建立索引的目的是加快對錶中記錄的查詢或排序。
進行索引的必要
如果在查詢時常用類似以下的語句:
select * from mytable where category_id=1;
最直接的應對之道,是為category_id建立乙個簡單的索引:
createindex
mytable_categoryid
onmytable
(category_id);
如果有不止乙個選擇條件呢?例如:
select* from
mytable
where
category_id=1
and
user_id=2;
我們首先想到的
可能是,再給
user_id
建立乙個索引。這不是乙個最佳的方法。可以建立多重的索引。
createindex mytable_categoryid_userid on mytable (category_id,user_id);
那索引又有哪些種類呢?
一般來說分類方式不同,種類也就不同。
一般按照儲存方式可以將索引分成兩類,那就是順序索引,和雜湊索引。順序索引就是根據值的順序排序的(這個檔案裡面的值,也就是為其建索引的字段值,是順序的放在索引檔案裡面),另外乙個是雜湊索引,就是將值平均分配到若干雜湊桶中,通過雜湊函式定位的。 其中
順序索引下面又可以分很多的類。
如果被索引的字段本身按照一定的順序排序,那麼這種索引叫做聚集索引。否則叫做非聚集索引。如果被索引的字段的每個值都有乙個索引與其對應,那麼這種索引叫做稠密索引,否則叫做稀疏索引。順序索引分為兩類,單級索引(不怎麼用)和多級索引(通常是b+樹,大量使用)。單級索引就是把所有的索引字段以及對應的檔案位置按順序乙個個的排列出來,這種索引查詢起來比較慢,因為是順序儲存的,可以使用二分查詢法,但是總體來說效率不高,這種索引是最基礎的索引。
如果經常需要同時對兩個字段進行and查詢,那麼使用兩個單獨索引不如建立乙個復合索引,因為兩個單獨索引通常資料庫只能使用其中乙個,而使用復合索引因為索引本身就對應到兩個欄位上的,效率會有很大提高。
雜湊索引
就是通過雜湊函式來定位的一種索引,不過很少有單獨使用雜湊索引的,反而是雜湊檔案組織用的比較多。
要注意的是,建立太多的索引將會影響更新和插入的速度,因為它需要同樣更新每個索引檔案。對於乙個經常需要更新和插入的**,就沒有必要為乙個很少使用的
where
字句單獨建立索引了,對於比較小的表,排序的開銷不會很大,也沒有必要建立另外的索引。
點滴積累,期待巨大變化。
資料庫基礎之索引(一)
一 什麼是索引 索引是對資料庫一列值或多列值進行排序的一種結構。索引是乙個單獨的,物理的資料結構,它是表中一列值或若干列值得集合以及指向表中物理標識這些值的資料頁的邏輯指標清單。即索引 索引列集合 指向資料表的指標 二 索引有多少種 直接建立 create index indexname on ta...
資料庫之索引
1 索引的出現其實就是為了提高資料查詢的效率,就像書的目錄一樣。2 索引的出現是為了提高查詢效率,但是實現索引的方式卻有很多種,所以這裡也就引入了索引模 型的概念。可以用於提高讀寫效率的資料結構很多,這裡我先給你介紹三種常見 也比較簡單的 資料結構,它們分別是雜湊表 有序陣列和搜尋樹。2 雜湊表 假...
資料庫之 索引
資料庫為什麼要有索引?答 用於提高資料庫表的資料訪問速度。資料庫索引的資料結構基礎是b tree 多叉樹 b tree結構如下圖 ps 源自網路 索引是針對資料庫表中的某一列或多列建立的。建立索引 create index from tablename tableparam 建立多列索引 creat...