索引(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也會操作索引檔案,會調整因為更新等操作帶來的...