軟體體系結構——第十章<從模型到程式碼>
阿新 • • 發佈:2022-05-06
索引
索引(記錄,不斷更新..)
索引相當於一本書的目錄,通過目錄可以快速地對應相對的資源。在資料庫方面,查詢一張表的時候有兩種檢索方式:
- 全表掃描
- 根據索引檢索(效率很高)
索引雖然可以提高檢索的效率,但是在決定是否新增主鍵還是要仔細分析情況,不能隨意新增,例如:當資料量較小時就不必新增索引,因為索引也是資料庫的物件,需要資料庫不斷維護。是有維護成本的。還有當資料庫中的資料需要頻繁改動時就不適合加索引,因為一旦資料發生改動,索引也需要做對應的修改,進行維護。
新增索引是給某個欄位,或者某些欄位新增索引。
建立索引:
create index 索引名 on 表名(欄位名);
刪除索引
drop index 索引名 on 表名;
什麼時候考慮新增索引
- 當資料量龐大時。
- 該欄位很少的DML操作。
- 該欄位經常出現在where 語句之後。
主鍵具有unique約束欄位的會自動新增索引,所以主鍵的查詢效率較高,儘量根據主鍵檢索。
檢視sql語句的執行計劃!!??
索引的底層實現
索引底層使用B +Tree實現
原理
通過B Tree縮小掃描範圍,底層索引進行了排序,分割槽,索引會攜帶資料在表中的“實體地址”,
最終通過索引檢索到資料之後,獲取到關聯的實體地址,通過實體地址定位表中的資料,效率
是最高的。
select ename from emp where ename = 'SMITH';
通過索引轉換為:
select ename from emp where 實體地址 = 0x3;
分類
單一索引:給單個欄位新增索引
複合索引: 給多個欄位聯合起來新增1個索引
主鍵索引:主鍵上會自動新增索引
唯一索引:有unique約束的欄位上會自動新增索引
索引的失效
select ename from emp where ename like '%A%';
模糊查詢的時候,第一個萬用字元使用的是%,這個時候索引是失效的。