#### 概念
一個sql語句在沒有執行(運行)之前,先計算一下該sql語句需要調用的相關資源,再決定該sql語句是否要最終執行,該行為被稱為“執行計劃”。
#### 作用
主要用于分析sql語句的執行情況(并不執行sql語句)得到sql語句是否使用了索引,使用了哪些索引。

#### 語法
~~~
explain SQL語句;
~~~
結果
~~~
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+
| 1 | SIMPLE | t1 | NULL | ALL | NULL | NULL | NULL | NULL | 1 | 100.00 | NULL |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+
~~~
沒有使用索引和解釋
~~~
id: 1 //SELECT識別符。這是SELECT查詢序列號。這個不重要,查詢序號即為sql語句執行的順序.
select_type: SIMPLE //搜索類型,從最好到最差的連接類型為const、eq_reg、ref、range、 indexhe和ALL
table: t1 //表名
partitions: NULL
type: ALL
possible_keys: NULL //顯示可能應用在這張表中的索引。如果為null,沒有可能的索引。
key: NULL // 實際使用的索引。如果為NULL,則沒有使用索引。很少的情況下,MYSQL會選擇優化不足的索引。這種情況下,可以在SELECT語句中使用USE INDEX(indexname)來強制使用一個索引或者用
key_len: NULL //使用的索引的長度。在不損失精確性的情況下,長度越短越好.
ref: NULL //顯示索引的哪一列被使用了,如果可能的話,是一個常數.
rows: 1 //mysql認為必須檢查的用來返回請求數據的行數.
filtered: 100.00
Extra: NULL
~~~
使用索引的情況
~~~
id: 1
select_type: SIMPLE
table: t1
partitions: NULL
type: const
possible_keys: PRIMARY
key: PRIMARY
key_len: 4
ref: const
rows: 1
filtered: 100.00
Extra: NULL
1 row in set, 1 warning (0.00 sec)
~~~
- MySQL優化概述
- 存儲引擎的選擇
- innodb引擎
- myisam引擎
- memory引擎
- 查詢需優化語句
- 通用查詢日志
- 慢查詢日志
- profile機制
- 索引
- 索引基本介紹
- 索引類型
- 索引管理語法
- 創建索引主要事項
- 執行計劃
- 查看索引類型
- myisam索引數據結構
- innodb索引數據結構
- 索引覆蓋
- 索引使用原則
- 列獨立
- like查詢
- 復合索引使用
- or運算都具有索引
- mysql智能選擇
- 優化group by語句
- 前綴索引
- 全文索引
- 查詢緩存
- 查詢緩存操作
- 無緩存
- limit分頁優化
- 分區
- 分區介紹
- list分區
- range分區
- hash分區
- key(鍵值)分區
- 分區管理
- 分表
- 分表介紹
- 水平分表
- 垂直分表
- MySQL鎖機制
- 鎖機制介紹
- 鎖的幾種形式
- 表鎖操作
- 行鎖操作
- 數據碎片與維護
- 范式
- 第一范式
- 第二范式
- 第三范式
- 反三范式
- 主從復制
- 介紹
- 讀寫分離