日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 多key索引_MYSQL的EXPLAIN到底多好用?

發布時間:2025/6/15 数据库 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 多key索引_MYSQL的EXPLAIN到底多好用? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

工欲善其事必先利其器!

作為一名程序員,免不了要和MYSQL打交道。而在這過程中,就不得不面對性能優化這一大課題。

而在性能優化中,EXPLAIN就是能夠幫助我們查看SQL執行計劃是否優化的一個工具。

今天,我們就基于一個案例來看看EXPLAIN的神奇作用。

一、具體案例

我們來執行一條非常簡單的代碼:

expain select * from t1,t2,t3 where t1.id=t2.id and t2.id=t2.id;

執行之后的結果如下:

發現出來了很多的字段,這么多字段其實也沒必要每個都重點關注,上面圖片用紅色框框標出了5個字段,這些是需要重點關注的。下面具體來說說這5個字段的含義。

1.type

表示訪問表的方式,一共有6種。

從最好到最差的結果依次如下:

system > const > eq_ref > ref > range > index > ALL

注意:一個好的SQL語句至少要達到range級別!杜絕出現all級別。

system: 表示結果集僅有一行;

const: 表示通過主鍵或者唯一鍵查找數據時只匹配最多一行數據;

eq_ref: 該類型多出現在多表join場景,通過主鍵或者唯一鍵訪問表;

對于前表b的每行記錄,都只能匹配到后表a的一行記錄并且查詢的比較操作通常是=,查詢效率較高。

ref: 此類型通常出現在sql使用非唯一或非主鍵索引, 或者是使用最左前綴規則索引的查詢;

range: 表示where條件使用索引范圍查詢,當 type 是 range 時,ref 字段為 NULL。

index: 表示全索引掃描, 掃描所有的索引記錄, 而不掃描數據;

index 類型通常會出現在覆蓋索引中,所要查詢的數據直接在索引中就可以訪問, 而不用回表掃描數據。 此時Extra 字段 會顯示 Using index。還有一種是全表掃描時通過索引順序訪問數據。此時并不會在Extra提示 using index。

ALL: 表示執行計劃選擇全表掃描,當執行計劃出現type 為all 時,我們盡量通過修改索引的方式讓查詢利用索引。

2.key

此字段是 MySQL 在當前查詢時所使用到的索引。

如果沒有選擇索引,值是NULL。

可以采取強制索引方式。

3.key_len

key_len表示執行計劃所選擇的索引長度有多少字節,通常我們可借此判斷聯合索引有多少列。

key_len 大小的計算規則是:

一般地,key_len 等于索引列類型字節長度,例如int類型為4 bytes,bigint為8 bytes;如果是字符串類型,還需要同時考慮字符集因素,例如:CHAR(30) UTF8則key_len至少是90 bytes;若該列類型定義時允許NULL,其key_len還需要再加 1 bytes;若該列類型為變長類型,例如 VARCHAR(TEXT\BLOB不允許整列創建索引,如果創建部分索引也被視為動態列類型),其key_len還需要再加 2 bytes。

4.rows

表示的是掃描行數。

記住:該值是個預估值,所以并非是完全準確的值。

MySQL 查詢優化器根據統計信息,估算 SQL 要查找到結果集需要掃描讀取的數據行數。

原則上 rows 越少越好。

5.extra

該列會提示優化執行計劃的額外的信息。

注意,常見的不太友好的、值得大家關注的有如下幾種:

Using index。表示該sql利用覆蓋索引掃描,也即從只訪問索引即可獲取到所需的數據,而不用回表。

Using where。表示該sql 回表獲取數據了。什么是回表呢? 其實就是僅僅通過訪問索引不能滿足獲取所需的數據,需要訪問表的page 頁。

如果和Using index 同時出現,說明where條件通過索引定位數據,然后回表,再過濾所需要的數據。

Using filesort。說明排序沒有利用索引而發生了額外排序 ,伴隨著的可能還有Using temporary。

其實還有其他一些 提示Using MRR、Using index condition 、Using index for group-by,這些提示是正向的,說明sql比較優化。

6.其它字段

前面講了5個比較重要的字段,相信很多求知欲強的小伙伴也想知道其它字段是什么意思,這里也一并列出來,以供參考:

字段

含義

查詢語句的序號或者說是標識符

select_type

表是查詢的類型,常見的有如下6種

table

其值為表名或者表的別名,表示訪問哪一個表

partitions

匹配的分區

possible_keys

表示查詢時,可能使用的索引

filtered

按表條件過濾的行百分比

二、總結

本文基于一個最為簡單的案例講解了explain的執行結果,最為重要的是5個字段,其它字段了解含義即可,希望對您有用~

總結

以上是生活随笔為你收集整理的mysql 多key索引_MYSQL的EXPLAIN到底多好用?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。