mysql資料庫索引語句 MySQL資料庫之索引

2021-10-17 15:24:46 字數 2116 閱讀 9779

一、什麼是索引

索引是一種用於快速查詢到匹配條件的資料的資料結構,是用來加快查詢的技術。索引對良好的資料庫效能來說,是乙個非常重要的指標。當表中的資料量越來越大的時,其索引就越來越重要。

基本法則

索引應該構建在被用作《查詢條件》的字段上

索引型別

1) b+ tree索引

btree樹的特性:多路平衡樹

樹中每個節點最多包含m個子節點

每乙個葉子節點到根節點的距離是相同的

b+ tree樹的特點:

有n棵子樹的b+tree最多含有n個key,而btree最多含有n-1個key。

b+tree的葉節點儲存所有的key資訊,依key大小順序排列。

所有的非葉子節點都可以看作是key的索引部分,節點中只含有其子節點的最大(或最小)key。

適合b+tree索引的查詢型別:(全鍵值、最左字首、匹配範圍)

全值匹配:精確查詢某個鍵的值,如name=「jinjiao king」

匹配最左字首:  只精確匹配起頭部分 "jin%"

匹配範圍值: 從某個值到另乙個值

精確匹配某列並範圍匹配另一列

只訪問索引的查詢

不適合b+tree索引的場景:

如果不從最左列開始,索引無效,如比如乙個索引構建在(name、age)中,如果查詢語句中,查詢age>20的,這個索引就無效咯

不能跳過索引中的列  (stuid、name、age)

如果查詢中某個列是範圍查詢,那邊右側的列都無法再使用索引優化查詢

2)hash索引: 基於雜湊表

不適用於順序查詢或模糊匹配的查詢,只適合精確匹配的查詢,只有memory儲存引擎支援顯示hash索引,其他的都不支援

3)空間索引(r-tree)

只有myisam表支援空間索引

4)全文索引(fulltext)

索引的優點

索引可以降低伺服器需要掃瞄的資料量,減少io次數

索引可以幫助伺服器避免排序和使用臨時表

索引可以幫助將隨機i/o轉為順序i/o

高效能的索引策略

1)索引的字段,不要做算術運算,如果該列使用算術運算,那麼該列就無法使用索引咯

2)左字首索引;索引構建在字段的左側的多少個字元,要通過索引選擇性來評估

3) 多列索引 (and)

4)選擇合適的索引列次序,將選擇性最高的放在左側,範圍匹配的放右側

5) 為用來搜尋、分類、分組的資料列構建索引;意思就是說,適合索引的資料列是哪些where子句出現的、order by、group by子句**現的列

二)通過explain分析索引的有效性

使用方式:

explain select  獲取查詢執行計畫資訊

輸出說明:

id: 當前查詢語句中,每個select語句的編號

select_type:

簡單查詢: ******

簡單子查詢: subquery

用於from中的子查詢: derived

union語句的第乙個之後的select語句: union

table: 查詢對應的表

type: 即mysql決定如何去查詢表中行的方式

all:全表掃瞄

index:根據索引的次序進行全表掃瞄

range:範圍掃瞄,有範圍限制的根據索引來掃瞄。掃瞄位置始於索引中的某一點,結束於另一點

ref:基於等值的方式,根據索引返回表中匹配某單個值得所有行

eq_ref: 僅返回乙個行

const、system: 直接返回單個行(最佳的)

possible_keys:查詢可能會用到的索引

key: 查詢中使用到的索引

key_len:  在索引中使用的位元組數

ref: 在利用key欄位所表示的索引完成查詢時,所用的列或某常量值

rows: mysql估計為找到所有的目標行而需要讀取的行數(而不是最終的行數)

extra: 額外資訊

using index: 使用覆蓋索引

using where: mysql伺服器將在儲存引擎層檢索後,在進行一次過濾

using temporary: mysql對結果排序時會使用臨時表

using filesort:對結果使用乙個外部索引排序,基於檔案排序 (效能最差)

mysql索引語句 mysql建立索引語句格式

專案需要將某個表的某兩個字段新增唯一索引,保證這兩個欄位的值不能同時重複。alter table 表名 add unique index 索引名 欄位1,欄位2 當表中已經存在重複資料的時候,新增的時候就會報錯,這時候需要將資料去重。1 先查出來重複的資料 select from select 字段...

mysql建立刪除索引語句

1 檢視索引 show index from tb wz all 2 使用alter table語句建立索引。語法如下 alter table table name add index index name column list create index indexname on tablenam...

資料庫mysql索引 資料庫 mysql索引

mysql 索引 mysql索引的建立對於mysql的高效執行是很重要的,索引可以大大提高mysql的檢索速度。打個比方,如果合理的設計且使用索引的mysql是一輛蘭博基尼的話,那麼沒有設計和使用索引的mysql就是乙個人力三輪車。索引分單列索引和組合索引。單列索引,即乙個索引只包含單個列,乙個表可...