為什麼建立索引
如有sql語句:
select * from student where c1 = 2013222;
如果需要查詢對應的記錄:
無索引:資料庫按照一定的順序(物理順序、插入順序)查詢比較表中所有記錄,直到找到所有記錄為止;
有索引:如果在c1列有對應的索引,則在查詢的過程中資料庫不需要遍歷所有記錄,就可以找出所有符合條件的記錄;
所以,建立索引主要的作用是優化查詢的速度;
索引的一般實現方式
簡單的比如: 在乙個有序的陣列中要查詢乙個數必定要比在乙個無序的陣列中查詢要簡單很多;
索引實現的一般演算法:
b-tree和b+tree(演算法略)
目前大部分資料庫系統及檔案系統都採用b-tree或其變種b+tree作為索引結構。具體採用何種演算法,需要考慮演算法的時間複雜度和資料物理儲存方式(略);
由於b-tree的特性,在b-tree中按key檢索資料的演算法非常直觀:首先從根節點進行二分查詢,如果找到則返回對應節點的data,否則對相應區間的指標指向的節點遞迴進行查詢,直到找到節點或找到null指標,前者查詢成功,後者查詢失敗。:
通過上圖,我們可以發現,在有索引的資料表中,可以通過一定的資料結構快速查詢定位,再通過所儲存的實體地址資訊獲取到對應的記錄資料;
聚集索引:保證物理順序和邏輯順序(索引順序)一致;該不該建索引索引並不是越多越好,索引本身需要儲存空間,同時索引的維護也需要一定的開銷
確定是否有必要建立索引大致需要考慮以下幾個問題:
1.建立索引的列的資料型別應該為基本的資料型別
對於blob,text等資料量較大或二進位制的字段,資料量大,不建議建立索引;2.建立索引的列是否為經常作為查詢條件的列
如果某一列經常作為where語句中的查詢條件,則可以考略在對應列上建立索引;3.建立索引的列的值是否分布均勻(重複欄位少)
比如表示性別字段,只會出現男和女兩個值,且重複的情況較多,也不建議建立索引;4.建立索引的列是否為經常變化的字段
對於一些經常變化的字段或者臨時表,不建議建立索引,因為值的改變和記錄的增刪都需要動態維護索引,會增加資料庫的開銷,減小了資料更新的效率;總之,是否有必要建立索引需要綜合考慮查詢效率和資料修改的效率;
參考:關於資料庫索引設計的幾個常用演算法
mysql索引背後的資料結構及演算法原理
資料庫索引相關
考慮乙個關係表和建立在該錶上的乙個索引,如果該表中的資料記錄的排序順序與該索引的索引項的排序順序一致,則該索引為 a 聚集索引 b 非聚集索引 c 稠密索引 d 輔索引 答案 a 解析 對於乙個關係表和建立該錶上的乙個索引,如果該表中的資料記錄的排序順序與該索引的索引項的排序順序一致,則該索引是聚集...
資料庫索引相關知識
查詢條件欄位和排序字段,新增聯合索引,查詢條件欄位在聯合索引的前面 整數型別比字元型別處理開銷更小 盡量避免null,應該指定列為 not null,使用乙個特殊的值 0,或者空值 來代替null 含有null的列很難進行查詢優化,建立索引的原則 1.對於查詢中很少涉及的列或者重複值比較多的列,不要...
資料庫索引事務相關
一 概念 索引是一種特殊的檔案,包含著對資料表裡所有記錄的引用指標。可以對錶中的一列或多列建立索引,並指定索引的型別,各類索引有各自的資料結構實現。二 作用 資料庫中的表 資料 索引之間的關係,類似於書架上的圖書 書籍內容和書籍目錄的關係。索引所起的作用類似書籍目錄,可用於快速定位 檢索資料。索引對...