久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

MySQL中explain命令有什么用

137次閱讀
沒有評論

共計 2808 個字符,預計需要花費 8 分鐘才能閱讀完成。

這篇文章主要介紹了 MySQL 中 explain 命令有什么用,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓丸趣 TV 小編帶著大家一起了解一下。

下面來講講這個 MySQL 提供的 explain 命令:

語法:explain SQL 語句例如:

1explain select * from user where id=1

執行完畢之后,它的輸出有以下字段:

  id
  select_type
  table
  partitions
  type
  possible_keys
  key
  key_len
  ref
  rows
  Extra

要想知道 explain 命名怎么使用,就必須把這些字段搞清楚

1. id

SELECT 查詢的標識符,每個 SELECT 語句都會自動分配一個唯一的標識符

2. select_type

每個 select 查詢字句的類型,具體類型以及對應作用如下表:

類型名解釋 SIMPLE 簡單 SELECT, 不使用 UNION 或子查詢等 PRIMARY 查詢中若包含任何復雜的子部分, 最外層的 select 被標記為 PRIMARYUNIONUNION 中的第二個或后面的 SELECT 語句 DEPENDENT UNIONUNION 中的第二個或后面的 SELECT 語句,取決于外面的查詢 UNION RESULTUNION 的結果 SUBQUERY 子查詢中的第一個 SELECTDEPENDENT SUBQUERY 子查詢中的第一個 SELECT,取決于外面的查詢 DERIVED 派生表的 SELECT, FROM 子句的子查詢 UNCACHEABLE SUBQUERY 一個子查詢的結果不能被緩存,必須重新評估外鏈接的第一行

3. table

顯示這一行的數據是查哪張表的,不過有時短路顯示的不是真實的表名。

4. partitions

匹配的分區 (這個目前用處不大)

5. type

訪問類型,表示 MySQL 在表中找到所需行的方式,對應的值和解釋如下:

類型名優級別解釋 system1 表僅有一行 const2 表最多有一個匹配行, 在查詢開始時即被讀取 eq_ref3 使用 primary key 或者 unique key 作為多表連接的條件, 僅從該表中讀取一行 ref4 作為查詢條件的索引在每個表匹配索引值的行從表中讀取出來 fulltext5 全文索引檢索 ref_or_null6 和 ref 一致,但增加了 NULL 值查詢支持 index_merge7 表示使用了索引合并優化方法 unique_subquery8 使用了替換了 in 子查詢 index_subquery9 使用了替換了 in 子查詢,但只適用于子查詢中的非唯一索引 range10 只檢索給定范圍的行, 使用一個索引來選擇行 index11 全表掃描,但掃描表的方式是按索引的次序進行 ALL12 全表掃描的方式找到匹配的行

type 作為訪問類型,其值代表著當前查詢所用的類型,是體現性能的一個重要指標,從表中可以看到,從上到下,掃描表的方式越來越寬,性能也就越來越差,因此,對于一個查詢,最好能保持在 range 級別以上。

6. possible_keys

主動指出查詢能用哪個索引在表中找到記錄也就是會列出在查詢中的字段中有索引的字段,但不一定被查詢所用。

7. key

顯示再查詢中實際使用的索引 / 鍵,如果沒有索引,則顯示 NULL。但如果想強制查詢中使用或忽視 possible_keys 列中的索引,則可以在查詢中使用 FORCE INDEX、USE INDEX 或者 IGNORE INDEX。

8. key_len

表示索引中使用的字節數。

9. ref

表示哪些列或常量被用于查找索引列上的值。

10. rows

顯示當前查詢估算到的查找到匹配記錄所需的記錄行數。

11. Extra

顯示當前查詢所用的解決方式,它有以下幾種情況:

類型名解釋 Using where 列數據是從僅僅使用了索引中的信息而沒有讀取實際的行動的表返回的,Using temporary 表示 MySQL 需要使用臨時表來存儲結果集,常見于排序和分組查詢 Using filesortMySQL 中無法利用索引完成的排序操作稱為“文件排序”Using join buffer 改值強調了在獲取連接條件時沒有使用索引,并且需要連接緩沖區來存儲中間結果。如果出現了這個值,那應該注意,根據查詢的具體情況可能需要添加索引來改進能。Impossible where 這個值強調了 where 語句會導致沒有符合條件的行。Select tables optimized away 這個值意味著僅通過使用索引,優化器可能僅從聚合函數結果中返回一行

講完了語法,我們來實際操作一波,首先創建個表:

--  創建表
CREATE TABLE test(id INT(11) NOT NULL AUTO_INCREMENT,
uname VARCHAR(255),
PRIMARY KEY(id) 
);

然后給 uname 字段加上索引:

--  添加索引
ALTER TABLE test ADD INDEX uname_index (uname);

查看一下索引是否添加成功:

--  查看是否有索引
SHOW INDEX FROM test;

輸出結果為:

可以看出索引已經創建成功,接下來添加一些數據:

--  添加一些數據
INSERT INTO test VALUES(1, jay 
INSERT INTO test VALUES(2, ja 
INSERT INTO test VALUES(3, bril 
INSERT INTO test VALUES(4, aybar

一切準備就緒,下面用 explain 這個命令來探究一些 like 語句是否有索引,like 有四種情況,分別為沒有 %、%%、左 %、右 %、

1. like 字段名

EXPLAIN SELECT * FROM test WHERE uname LIKE  j

輸出為:

可以看出:type 的值為:range,key 的值為 uname_index,也就是說這種情況下,使用了索引。

2. like % 字段名 %

EXPLAIN SELECT * FROM test WHERE uname LIKE  %j%

輸出為:

可以看出:type 的值為 ALL 也就是全表掃描,而且 key 的值為 NULL,也就是說沒用到任何索引。

3. like % 字段名

EXPLAIN SELECT * FROM test WHERE uname LIKE  %j

輸出為:

可以看出:type 的值為 ALL,key 的值為 NULL,同樣沒用到索引。

4. like 字段名 %

EXPLAIN SELECT * FROM test WHERE uname LIKE  j%

輸出為:

可以看出:type 的值為:range,key 的值為 uname_index,也就是說這種情況下,使用了索引。

感謝你能夠認真閱讀完這篇文章,希望丸趣 TV 小編分享的“MySQL 中 explain 命令有什么用”這篇文章對大家有幫助,同時也希望大家多多支持丸趣 TV,關注丸趣 TV 行業資訊頻道,更多相關知識等著你來學習!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-04發表,共計2808字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 周口市| 商洛市| 英山县| 通海县| 澄江县| 封开县| 屏边| 长阳| 弥勒县| 云林县| 吴桥县| 香港 | 吴堡县| 万州区| 台东县| 宜宾市| 晋宁县| 桑植县| 遂平县| 保亭| 平原县| 宜良县| 紫阳县| 民和| 涪陵区| 阿克苏市| 蓝山县| 读书| 安义县| 尼勒克县| 日照市| 丰都县| 兴和县| 万载县| 黎平县| 建水县| 贞丰县| 浪卡子县| 阿坝县| 宜良县| 灵石县|