數據庫原理學習一之索引

官方解釋:索引就像書的目錄, 通過書的目錄就準確的定位到了書籍具體的內容
1.索引類型
索引分爲聚集索引和非聚集索引,但不論是就聚集索引還是非聚集索引最終都會利用主鍵通過聚集索引來定位到數據。區別在於通過聚集索引可以查到需要查找的數據, 而通過非聚集索引可以查到記錄對應的主鍵值 , 再使用主鍵的值通過聚集索引查找到需要的數據
2.索引原理
首先聲明:平衡樹不是二叉樹,平衡樹又叫B-tree。
若不建立索引,查詢數據必須通過遍歷全表,建立索引後,表的數據存儲結構會轉變成樹狀結構,即平衡樹結構。當一張表沒有建立主鍵時數據的存儲結構是無序整齊排列,建立主鍵後存儲結構會轉變成樹狀結構,即整張表形成了一個聚集索引,所以一張表有且僅能有一個聚集索引。(一張表只有一個主鍵)
建立聚集索引後查詢次數爲:log(以樹的分叉數爲底,數據總條數的對數)
3.索引缺點:
索引使查詢速度加快,但同時它也讓數據庫的寫入、修改、刪除的速度變慢。原因在於對數據庫的寫入、修改、刪除操作都會使平衡樹發生變化,每次操作後都必須對索引進行動態維護且不僅要保存數據,還要保存一下索引文件。
創建索引和維護索引要耗費時間,這種時間隨着數據量的增加而增加。數據量越大,維護消耗就越大。
索引需要佔物理空間,除了數據表佔數據空間之外,每一個索引還要佔一定的物理空間,如果要建立聚簇索引,那麼需要的空間就會更大。
4.索引應用場景
在經常需要搜索的列上,可以加快搜索的速度;
在作爲主鍵的列上,強制該列的唯一性和組織表中數據的排列結構;
在經常用在連接的列上,這些列主要是一些外鍵,可以加快連接的速度;
在經常需要根據範圍進行搜索的列上創建索引,因爲索引已經排序,其指定的範圍是連續的;
在經常需要排序的列上創建索引,因爲索引已經排序,這樣查詢可以利用索引的排序,加快排序查詢時間;
在經常使用在WHERE子句中的列上面創建索引,加快條件的判斷速度。
當修改性能大於索引性能或數據量過大或過小的取用較少的列都不應該建立索引
5.Mysql中的四種索引類型
普通索引:最基本的MySQL數據庫索引,它沒有任何限制
建立一個普通索引:create index 索引名 on 表名(字段名(length));
唯一索引:索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。
建立一個唯一索引:CREATE UNIQUE INDEX 索引名 ON 表名(字段名(length))
主鍵索引:是一種特殊的唯一索引,不允許有空值。一般在建表的時候同時創建了主鍵索引
建立一個主鍵索引:CREATE TABLE 表名( id INT NOT NULL, username VARCHAR(16) NOT NULL,
PRIMARY KEY(id ) );
組合索引:一個索引包含多個列
建立一個組合索引:CREATE TABLE 表名( id INT NOT NULL, username VARCHAR(16) NOT NULL,
city VARCHAR(50) NOT NULL, age INT NOT NULL );

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章