Mysql各種索引分析

2021-10-08 04:15:22 字數 2435 閱讀 6878

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...