索引是一種提高查詢效率的資料結構(b樹或雜湊結構)。
索引是建立在資料庫表中,對資料庫表中的一列或多列值進行排序的結果,好處是提高查詢效率。
(1)普通索引:無任何限制,可以給任意字段建立普通索引。
(2)唯一性索引:使用unique修飾的字段,值不可以重複。
(3)主鍵索引:使用primary key修飾的字段自動建立主鍵索引。
(4)單例索引:在乙個欄位上建立索引。
(5)多列索引:在多個欄位上建立索引。
(6)全文索引:使用fulltext引數可以設定全文索引。
只支援char、varchar、text型別的字段上,常用於資料量較大的字串型別。
(1)在建立表的時候指定索引字段。
create table table_name(id int,name varchar(12),index(id));
(2)在已經建立的表上新增索引。
1、create [unique | fulltext | spatial] index idx_id(索引名) on 表名(屬性名);
2、alter table 表名 add [unique | fulltext | spatial] index index_name(屬性);
drop index index_name on student(屬性名);
例:drop index idx_name on student;
表示sql執行可能會命中的索引有哪些。
key:表示執行過程中飯使用的索引名稱。
rows:表示查詢影響的資料行數。
通過explain關鍵字分析查詢sql,可以看出當前查詢命中索引idx_name。
mysql支援兩種索引:一種是b-樹索引,一種是雜湊表索引。這兩種索引的查詢效率是比較高的。
mysql innodb儲存引擎,基於b-樹(實際mysql採用的是b+樹)的索引結構。
b-樹是一種m階平衡樹,葉子節點都在同一層,由於每乙個節點儲存的資料量比較大,索引整個b-樹的層數是非常低的,基本上不超過三層
由於磁碟的讀取也是按block塊操作的(記憶體是按page頁面操作的),因此b-樹的節點大小一般設定為和磁碟塊大小一致,這樣乙個b-樹節點,就可以通過一次磁碟i/o把乙個磁碟塊的資料全部儲存下來,所以當使用b-樹儲存索引的時候,磁碟i/o的操作次數是最少的(mysql的讀寫效率,主要集中在磁碟i/o上)。
那麼mysql最終為什麼要採用b+樹儲存索引結構呢,那麼看看b-樹和b+樹在儲存結構上有什麼不同?
1、b-樹的每乙個節點,存了關鍵字和對應的資料位址,而b+樹的非葉子節點只存關鍵字,不存資料位址。
因此b+樹的每乙個非葉子節點儲存的關鍵字是遠遠多於b-樹的,b+樹的葉子節點存放關鍵字和資料,
因此,從樹的高度上來說,b+樹的高度要小於b-樹,使用的磁碟i/o次數少,查詢會更快一些。
2、b-樹由於每個節點都儲存關鍵字和資料,因此離根節點進的資料,查詢的就快,離根節點遠的資料,查詢的就慢;
b+樹所有的資料都存在葉子節點上,因此在b+樹上搜尋關鍵字,找到對應資料的時間是比較平均的,沒有快慢之分。
3、在b-樹上如果做區間查詢,遍歷的節點是非常多的;b+樹所有葉子節點被連線成了有序鍊錶結構,因此做整表遍歷和區間查詢是非常容易的。
雜湊索引當然是由雜湊表實現的,雜湊表對資料並不排序,因此不適合做區間查詢,效率非常低,需要搜尋整個雜湊表結構。
資料庫(六)索引
索引是一種特殊的資料庫結構,是提高資料庫效能的重要方式,可以用來快速查詢資料庫表中的特定記錄,mysql中所有的資料型別都可以被索引。mysql的索引包括普通索引 唯一性索引 全文索引 單列索引 多列索引和空間索引等。6.1索引概述 在mysql中,索引由資料表中一列或多列組合而成,建立索引的目的是...
資料庫mysql索引 資料庫 mysql索引
mysql 索引 mysql索引的建立對於mysql的高效執行是很重要的,索引可以大大提高mysql的檢索速度。打個比方,如果合理的設計且使用索引的mysql是一輛蘭博基尼的話,那麼沒有設計和使用索引的mysql就是乙個人力三輪車。索引分單列索引和組合索引。單列索引,即乙個索引只包含單個列,乙個表可...
六 資料庫規劃索引
chapter 6 規劃索引 現在我們先來做一下實驗,看一看有無索引對查詢速度的影響 在乙個有 1500000 條紀錄的表中,選擇一條資料,在無索引時用時 用時 9秒,而有索引時用時 0秒,開啟執行計畫可以看到更加詳細的紀錄 如果你訪問一家 但是每開啟乙個網頁要等待 60秒,你還願意再次訪問嗎?由於...