mysql官方堆索引的定義為:索引(index)是幫助mysql高效獲取資料的資料結構(有序)。在資料之外,資料庫系統還維護著滿足特定查詢演算法的資料結構,這些資料結構以某種方式引用(指向)資料,這樣就可以在這些資料結構上實現高階查詢演算法,這種資料結構就是索引。
類似資料的目錄索引,提高資料檢索的效率,降低資料庫的io成本。
通過索引列對資料進行排序,降低資料排序的成本,降低cpu消耗
實際上索引也是一張表,該表中儲存了主鍵與索引字段,並指向實體類的記錄,所以索引列也是要占用空間的。
雖然索引大大提高了查詢效率,同時卻也降低更新表的速度,如對表進行insert、update、delete。因為更新表時,mysql不僅要儲存資料,還要儲存一下索引檔案每次更新新增了索引列的字段,都會調整因為更新帶來的鍵值變化後的索引資訊。
索引是在mysql的儲存引擎層中實現的,而不是在伺服器層實現的。所以每種儲存引擎的索引都不一定完全相同,也不是所有的儲存引擎都支援所有的索引型別的。mysql目前提供了以下4種索引:
我們平常所說的索引,如果沒有特別之名,都是指b+樹(多路搜尋樹,並不一定是二叉的)結構組織的索引。其中聚集索引、復合索引、字首索引、唯一索引預設都是使用b+tree索引,統稱為索引。
btree又叫多路平衡搜尋樹,一顆m叉(可以有m個子節點)的btree特性如下:
btree樹和二叉樹相比,查詢資料的效率更高,因為對於相同的資料量來說,btree的層級結構比二叉樹小,因此搜尋速度更快。
b+tree為btree的變種,b+tree與btree的區別為:
n叉b+tree最多包含n個key,而btree最多包含n-1個key
b+tree的葉子節點儲存所有的key資訊,依key大小排序
所有的非葉子節點都可以看作是key的索引部分。
由於b+tree只有葉子節點儲存key資訊,查詢任何key都要從root走到葉子節點。所以b+tree查詢效率更加穩定。
mysql索引資料結構對經典的b+tree進行了優化,在原b+tree的基礎上,增加乙個指向相鄰葉子節點的鍊錶指標,就形成了帶有順序指標的b+tree,提高區間訪問的效能。
單值索引(單列索引):就是乙個索引只包含單個列,乙個表可以有多個單列索引
唯一索引:索引列的值必須唯一,但允許有空值
復合索引:即乙個索引包含多個列
# 建立索引 其中index_type為空時使用的索引型別為btree
create
[unique
|fulltext|spatial]
index index_name [
using index_type]
on table_name(index_col_name,..
.);
show
index
from table_name;
# 檢視不方便時在末尾加\g 這種方式只能在mysql命令行時使用
show
index
from table_name\g;
# 刪除索引 索引名 在 表名中;
drop
index index_name on table_name;
# 新增乙個主鍵索引
alter
table table_name add
primary
key(column_list)
;# 新增乙個唯一索引(除null外,null可能會出現多次)
alter
table table_name add
unique index_name(column_list)
;# 新增乙個普通索引,索引值可能會出現多次
alter
table table_name add
index index_name(column_list)
;# 建立乙個索引為fulltext,用於全文索引
alter
table table_name add fulltext index_name(column_list)
;
索引的設計可以遵循一些已有的原則,建立索引的時候請盡量考慮符合這些原則,便於提公升索引的使用效率,更高效的使用索引。
# 建立復合索引
create
index index_name_email_status on table_name(
`name`
,email,
`status`)
;# 相當於
# 對name 建立索引
# 對name,email 建立索引
# 對name,email,status 建立索引
本文根據學習b站【黑馬程式設計師】2020最新mysql高階教程(求職面試必備)
p3-p10整理筆記,有需要的同學可以前去系統的學習。
mysql各種索引名稱 MySQL索引型別大彙總
本文主要介紹了7種不同型別的mysql索引型別。在mysql資料庫表中,對欄位進行建立索引是可以大幅度的提高其實際查詢速度。通過對這些索引的巧妙的運用,我們可以令mysql的查詢和執行更加高效。索引是快速搜尋的關鍵。mysql索引的建立對於mysql的高效執行是很重要的。下面介紹幾種常見的mysql...
Mysql各種索引區別
mysql索引概念 說說mysql索引,看到乙個很少比如 索引就好比一本書的目錄,它會讓你更快的找到內容,顯然目錄 索引 並不是越多越好,假如這本書1000頁,有500也是目錄,它當然效率低,目錄是要佔紙張的,而索引是要佔磁碟空間的。mysql索引主要有兩種結構 b 樹和hash.hash hsah...
Mysql各種索引區別
mysql索引概念 說說mysql索引,看到乙個很少比如 索引就好比一本書的目錄,它會讓你更快的找到內容,顯然目錄 索引 並不是越多越好,假如這本書1000頁,有500也是目錄,它當然效率低,目錄是要佔紙張的,而索引是要佔磁碟空間的。mysql索引主要有兩種結構 b 樹和hash.hash hsah...