執行計劃中的內容-電商數據庫設計及優化學習筆記

一、背景

這是我的電商數據庫設計及優化學習筆記中關於執行計劃中的內容部分。
我們可以從執行計劃中獲得以下信息:
1、SQL是如何使用索引的,
2、還可以確認在關聯查詢時連接查詢的執行順序,
3、還可以查詢掃描的數據的行數,可以從另一個方面說明SQL有沒有正確使用索引。
那麼執行計劃中都有哪些內容呢?

二、內容

ID列
ID列中的數據爲一組數字,表示執行SELECT語句的順序。
如果ID列值爲null,這說明這組數據是由另外兩個數據庫進行unit操作所產生的結果集。
ID值爲數字時,如果ID值相同,執行順序由上至下,ID值越大優先級越高,越先被執行。
SELECT_TYPE列
有幾種可能的值,
SIMPLE(不包含子查詢或是UNION操作的查詢),PRIMARY(查詢中如果包含任何子查詢,那麼最外層的查詢則被標記爲PRIMARY),
SUBQUERY(SELECT列表中的子查詢),DEPENDT,SUBQUERY(依賴外部結果的子查詢),
UNION(UNION操作的第二個或是之後的查詢的值爲union),
DEPENDENT UNION(當UNION作爲子查詢時,第二個或是第二個後的查詢的select_type值),
UNION RESULT(UNION產生的結果集,這是它的id列值應該是null),
DERIVED(出現在FROM子句中的查詢)
TABLE列
輸出數據行所在的表的名稱
(unionM,N)由ID爲M,N查詢UNION產生的結果集
(derivedN)、(subqueryN)由ID爲N的查詢產生的結果集
PARTITIONS列
輸出分區表的列,對於分區表,顯示查詢的分區ID,對於非分區表,顯示爲NULL.
TYPE列
以下的值性能由高到低,
system(這是const聯接類型的一個特例,當查詢的表只有一行時使用,),
const(表中有且只有一個匹配的行是使用,如對主鍵或是唯一索引的查詢,這是效率最高的連接方式),
eq_ref(唯一索引或主鍵引查找,對於每個索引鍵,表中只有一條記錄與之匹配),
ref(非唯一索引查找,返回匹配某個單獨值的所有行),
ref_or_null(類似於ref類型的查詢,但是附加了對NULL值列的查詢),
index_merge(該聯接類型表示使用了索引合併優化方法),range(索引範圍掃描,常見於between、>、<這樣的查詢條件),index(FULL index Scan全索引掃描,同ALL的區別是,遍歷的是索引樹),all(FULL TABLE Scan全表掃描,這是效率最差的聯接方式)
Extra列
distinct(優化distinct操作,在找到第一匹配的元組後即停止找同樣值的動作),
not exists(使用not exists來優化查詢),using filesort(使用額外操作進行排序,通常會出現在ORDER BY或GROUP BY查詢中,查詢效率比較差),
using index(使用了覆蓋索引進行查詢),
Using temporary(MYSQL需要使用臨時表來處理查詢,常見於排序,子查詢,和分組查詢),
Using where(需要在MYSQL服務器層使用WHERE條件來過濾數據),select tables,optimized away(直接通過索引來獲得數據,不用訪問表)
POSSIBLE_KEY列
指出MYSQL能使用哪些索引來優化查詢,查詢列所涉及到的列上的索引都會被列出,但不一定會被使用。
KEY列
優化查詢是實際所使用的索引,如果沒有則顯示NULL,如果使用了覆蓋索引,會只顯示在POSSIBLE_KEY中
KEY_LEN列
表示索引字段的最大可能長度,是由字段定義計算的,並非數據實際長度。
REF列
說明了當前表利用KEY中的索引是用到的lie或者常亮。
ROWS列
表示MYSQL通過索引統計信息,估算的所需讀取的行數。其值是統計抽樣結果,並不十分準確
Filtered列
表示返回結果的行數佔需讀取行數的百分比,越大越好,依賴於統計信息,並不十分準確。

三、小結

通過執行計劃我們可以知道MySQL服務器是如何處理我們提交的請求的。幫助我們查看SQL的執行效率,以及是否正確地使用索引。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章