MySQL的explain简书_MySQL Explain
慢日志
數(shù)據(jù)庫開啟慢查詢記錄執(zhí)行時間比較久的SQL語句
mysql> SHOW VARIABLES LIKE "%slow%";
+---------------------+-------------------------------------------------------------+
| Variable_name | Value |
+---------------------+-------------------------------------------------------------+
| log_slow_queries | OFF |
| slow_launch_time | 2 |
| slow_query_log | OFF |
| slow_query_log_file | D:\phpStudy\PHPTutorial\MySQL\data\DESKTOP-H6DQQNO-slow.log |
+---------------------+-------------------------------------------------------------+
參數(shù)
描述
slow_query_log
是否開啟慢日志查詢,默認(rèn)為OFF。
slow_query_log_file
慢日志文件配置路徑
log_slow_queries
已被slow_query_log取代,兼容性保留。
臨時開啟慢日志
mysql> SET GLOBAL slow_query_log="ON";
慢日志默認(rèn)記錄的是查詢超過10秒的SQL語句
mysql> SHOW VARIABLES LIKE "long_query_time";
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set
優(yōu)化器
EXPLAIN命令用于查詢SQL語句的執(zhí)行計劃,可查看到SQL語句是否使用索引、是否做全表掃描。
EXPLAIN關(guān)鍵字用于模擬MySQL優(yōu)化器執(zhí)行SQL語句,用于分析SQL語句和表性能瓶頸。
EXPLAIN關(guān)鍵字可獲取信息包括
表讀取順序
數(shù)據(jù)讀取操作
可使用的索引
實際已使用的縮影
表之間的引用
表有多少行被優(yōu)化器查詢
EXPLAIN SQL語句
例如:
mysql > EXPLAIN SELECT * FROM test.accounts WHERE 1=1;
+----+-------------+----------+------+---------------+------+---------+------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+------+---------------+------+---------+------+------+-------+
| 1 | SIMPLE | accounts | ALL | NULL | NULL | NULL | NULL | 2 | |
+----+-------------+----------+------+---------------+------+---------+------+------+-------+
1 row in set
字段
描述
id
查詢序列號,表示查詢中執(zhí)行SELECT子句或操作表的順序,即表的讀取順序。
table
正在訪問的數(shù)據(jù)表
select_type
查詢類型,數(shù)據(jù)讀取操作的操作類型。
tpye
訪問類型
possible_keys
可能應(yīng)用在當(dāng)前表中的索引,那些索引可以使用。
key
實際使用的索引,哪些索引被實際使用。
ken_len
索引使用的字節(jié)數(shù)即索引長度
ref
索引列,表直接的引用。
rows
根據(jù)表統(tǒng)計信息以及索引選用情況,估算出查詢記錄所需掃描讀取的行數(shù)。每張表會有多少行被優(yōu)化器查詢。
Extra
額外信息
查詢序列號id
SELECT查詢的序列號,包括一組數(shù)字,表示查詢中執(zhí)行SELECT子句或操作表的順序,id字段通常于table字段搭配來分析。
多個ID相同,則表示讀取順序從上到下,依次執(zhí)行。
多個ID不同,如是子查詢則ID序號遞增,ID越大優(yōu)先級越高,越先被執(zhí)行。
多個ID有相同也有不同,ID相同可認(rèn)為是一組從上到下順序執(zhí)行,組中ID不同則ID越大優(yōu)先級越高優(yōu)先執(zhí)行。
查詢類型select_type
查詢類型
描述
SIMPLE
簡單查詢,不包含子查詢或聯(lián)合查詢。
PRIMAY
主查詢,查詢中若包含復(fù)雜的子部分,最外層查詢則會被標(biāo)記為PRIMARY。
SUBQUERY
子查詢,即在SELECT或WHERE子句中包含子查詢。
DERIVED
衍生查詢,在FROM子句中包含了子查詢。
UNION
聯(lián)合查詢
UNION RESULT
從聯(lián)合表獲取結(jié)果中進行的查詢
訪問類型type
type表示查詢所使用的訪問而類型,用于表示查詢的SQL的好壞程序,從最好到最差依次為:system > const > eq_ref > ref > range > index > all
訪問類型
描述
NULL
MySQL在優(yōu)化階段分解查詢語句,在執(zhí)行階段不再訪問表或索引。
system
表只有一條記錄,等同于系統(tǒng)表。
const
通過索引一次即可找到,const用于primary key或unique索引,因為只匹配一行所以很快。
eq_ref
唯一性索引掃描,對于每個索引鍵,表中只有一條記錄與之匹配,常見于主鍵或唯一索引掃描。
ref
非唯一性索引掃描,返回匹配某個單獨值得所有行,本質(zhì)上是一種索引訪問,返回所有匹配某個單獨值得行。
ref_or_null
類似ref但可搜索值為NULL得行
index_merge
使用索引合并得優(yōu)化方法
range
只索引給定范圍得行,使用一個索引來選擇行,key列顯示使用哪個索引。
index
從索引中讀取
all
遍歷全表找到匹配行
總結(jié)
以上是生活随笔為你收集整理的MySQL的explain简书_MySQL Explain的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 珲春电费多少钱一度珲春电费?
- 下一篇: 蚊香和液体蚊香有什么区别?