MySQL索引和執行計畫

2021-09-29 01:12:47 字數 2416 閱讀 1264

索引(index)是幫助mysql高效獲取資料的資料結構。可以得到索引的本質:索引是資料結構

右側是資料表,一共有兩列七條記錄,最左邊的是資料記錄的實體地址

show index from table_name
create  [unique ] index indexname on mytable

(columnname

(length));

alter table 表名 add [unique ] index [indexname] on (

columnname

(length)

)

drop index [indexname] on mytable;
使用explain關鍵字可以模擬優化器執行sql查詢語句,從而知道mysql是如何處理你的sql語句的。分析你的查詢語句或是表結構的效能瓶頸

執行計畫-id

select查詢的序列號,包含一組數字,表示查詢中執行select子句或操作表的順序,id值越大優先順序越高,越先被執行

執行計畫-select_type

查詢的型別,主要是用於區別普通查詢、聯合查詢、子查詢等的複雜查詢

執行計畫-table

顯示這一行的資料是關於哪張表的

執行計畫-type

type顯示的是訪問型別,是較為重要的乙個指標,結果值從最好到最壞依次是:system>const>eq_ref>ref>range>index>all

執行計畫-possible_keys

可能會使用到的索引

執行計畫-key

實際使用的索引。如果為null,則沒有使用索引

查詢中若使用了覆蓋索引,則該索引和查詢的select欄位重疊

執行計畫-key_len

表示索引中使用的位元組數,可通過該列計算查詢中使用的索引的長度。在不損失精確性的情況下,長度越短越好

key_len顯示的值為索引欄位的最大可能長度,並非實際使用長度,即key_len是根據表定義計算而得,不是通過表內檢索出的。根據這個值,就可以判斷索引使用情況,特別是在組合索引的時候,判斷所有的索引字段是否都被查詢用到。

datetime型別在5.6中字段長度是5個位元組

變長字段需要額外的2個位元組(varchar值儲存時只儲存需要的字元數,另加乙個位元組來記錄長度(如果列宣告的長度超過255,則使用兩個位元組),所以varcahr索引長度計算時候要加2),固定長度欄位不需要額外的位元組。

而null都需要1個位元組的額外空間,所以索引字段最好不要為null,因為null讓統計更加複雜並且需要額外的儲存空間。

復合索引有最左字首的特性,如果復合索引能全部使用上,則是復合索引欄位的索引長度之和,這也可以用來判定復合索引是否部分使用,還是全部使用

執行計畫-ref

顯示索引的哪一列被使用了,如果可能的話,是乙個常數。哪些列或常量被用於查詢索引列上的值

執行計畫-rows

根據表統計資訊及索引選用情況,大致估算出找到所需的記錄所需要讀取的行數

執行計畫-extra

覆蓋索引(covering index),一說為索引覆蓋。

如果要使用覆蓋索引,一定要注意select列表中只取出需要的列,不可select *

Mysql 索引和執行計畫

平衡二叉樹示意圖。聚簇索引 輔助索引 單列索引 聯合索引 i ndex a,b,c 查詢條件一定要帶a才能走索引 最左列 字首索引 由於索引列,字元太長,占用空間太大,索引樹高度增高。查詢時需要檢索更多的索引也。mysql中建議3,4層。所以可以選擇大字段的前部分作索引。2.資料庫行過多 1.索引欄...

Mysql 索引和執行計畫

平衡二叉樹示意圖。聚簇索引 輔助索引 單列索引 聯合索引 i ndex a,b,c 查詢條件一定要帶a才能走索引 最左列 字首索引 由於索引列,字元太長,占用空間太大,索引樹高度增高。查詢時需要檢索更多的索引也。mysql中建議3,4層。所以可以選擇大字段的前部分作索引。2.資料庫行過多 1.索引欄...

mysql索引執行計畫 MySQL索引及執行計畫

mysql索引及執行計畫 索引合理的建立索引可以加快資料查詢,例如,學校圖書管為每一本書編號,根據編號可以快速鎖定一本書所在位置。mysql索引預設b 樹索引。索引雖然能夠提高檢索效率,但同時也會降低更新的速度,因為insert update delete也會操作索引檔案,會調整因為更新等操作帶來的...