Mysql Mysql索引詳解

2022-05-19 10:31:33 字數 2386 閱讀 6202

索引概述

mysql資料庫系統除了儲存資料之外,為了能夠提高對資料的快速訪問,mysql為此設計了索引,mysql索引是一種可以快速提高mysql高效查詢資料的一種資料結構。舉個例子索引就跟我們的書本的目錄一樣,如果一本書沒有目錄,那麼你要找想看的地方,那會是相當費勁的,只能一頁頁去翻,而資料庫的索引就是扮演這樣的角色,索引會告訴你對應的資料存放的磁碟位址,就好比目錄上面的頁數。

索引的優點和缺點

優點1. 可以提高資料的查詢速度,降低io所消耗的時間。

2. 通過索引可以資料進行排序,因為索引本身就是有序的,可以降低cpu的消耗。

缺點1. 雖然索引大大提高了查詢速度,同時卻會降低更新表的速度,如對表進行insert、update和delete。因為更新表時,不僅要儲存資料,還要儲存一下索引檔案。

2. 建立索引會占用磁碟空間的索引檔案。一般情況這個問題不太嚴重,但如果你在乙個大表上建立了多種組合索引,索引檔案的會增長很快。索引只是提高效率的乙個因素,如果有大資料量的表,就需要花時間研究建立最優秀的索引,或優化查詢語句。

mysql索引型別

mysql的索引是由具體的儲存引擎來實現的。下面是兩個維度來看mysql的索引型別。

應用層次維度劃分

1. 普通索引:即乙個索引只包含單個列,乙個表可以有多個單列索引。

2. 唯一索引:索引列的值必須唯一,但允許有空值。

3. 聯合索引:乙個索引包含多個列。

儲存結構維度劃分

1. b-tree索引(b+tree,b-tree)。

2. 雜湊索引。

3. 全文索引(full-index)。

索引的使用

索引的使用分為適合使用索引的場景,不適合使用索引的場景,還有索引失效的情況。

1. 適合使用索引的場景

1) 主鍵自動建立唯一索引

2) 頻繁作為查詢條件的字段

3) 查詢中與其他表關聯的字段

4) 查詢中排序的字段

5) 查詢中統計或分組字段

2. 不適合使用索引的場景

1) 頻繁更新的字段。

2) where 條件中用不到的字段。

3) 表記錄太少。

4) 經常增刪改的表。

5) 欄位的值的差異性不大或重複性高。

3. 索引失效的情況

1) 使用like模糊查詢時,以 % 開頭。

2) 使用 or 時,如:欄位1(非索引)or 欄位2(索引)會導致索引失效。

3) 使用復合索引時,不使用第乙個索引列。

mysql使用的是b+樹,查詢複雜度是logn,同時插入新的節點不必移動全部節點。兼顧了插入,更新與查詢效能。

索引覆蓋

如果乙個索引包含所有需要的查詢的字段的值,我們稱之為覆蓋索引。覆蓋索引是非常有用的工具,能夠極大的提高效能。因為,只需要讀取索引,而無需讀表,極大減少資料訪問量。

最左字首原則

用於聯合索引中。

索引下推(index condition pushdown,icp)

索引下推是指根據聯合索引查詢所滿足條件的在進行篩選,然後在回表返回資料。比如這樣的查詢條件  like 'songgj%』and age >20檢索,在mysql5.6版本之前,會對匹配的資料進行回表查詢。5.6版本後,會先過濾掉age<10的資料,再進行回表查詢,這樣可以減少回表次數提公升查詢效率。

檢視索引大小

檢視表資料占用的位元組數以及索引大小的位元組數是在庫information_schema下的tables中

select

table_name,

table_rows,

concat(

round((index_length)/

1024

/1024,2),'mb'

) index_data ,

concat(

round((data_length)/

1024

/1024,2),'mb'

) data_data

from

tables

where table_name='表名

'and table_schema =

'資料庫名

'

具體查詢如下

MySQL MySQL 聯合索引詳解 以及注意事項

聯合索引又叫復合索引。對於復合索引 mysql從左到右的使用索引中的字段,乙個查詢可以只使用索引中的一部份,但只能是最左側部分。例如索引是key index a,b,c 可以支援a a,b a,b,c 3種組合進行查詢,但不支援 b,c進行查詢 當最左側欄位是常量引用時,索引就十分有效。兩個或更多個...

索引 mysql MySql索引那些事

概述一 什麼是索引 資料庫索引,是資料庫管理系統中乙個排序的資料結構,以協助快速查詢 更新資料庫表中資料。就像我們以前用的新華字典的目錄一樣,能幫助我們快速查詢到某乙個字。二 索引的分類 分類角度索引名稱 資料結構b 樹,hash索引,r tree等 儲存層面聚簇索引,非聚簇索引 邏輯層面主鍵索引,...

MySQL MySQL神器之索引

索引是對資料庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問資料庫表中的特定資訊。如果想按特定職員的姓來查詢他或她,則與在表中搜尋所有的行相比,索引有助於更快地獲取資訊。索引的乙個主要目的就是加快檢索表中資料,亦即能協助資訊搜尋者盡快的找到符合限制條件的記錄id的輔助資料結構。在 mysq...