在 mysql 中可以通過 explain 關鍵字模擬優化器執行 sql 語句,從而知道 mysql 是如何處理 sql 語句的。
explain select 投影列 from 表名 where 條件
查詢執行順序:
id 值相同時表示從上向下執行
id 值相同被視為一組
如果是子查詢,id 值會遞增,id 值越高,優先順序越高
顯示這一行的資料是關於哪張表的。
這是重要的列,顯示連線使用了何種型別。從最好到最差的連線型別為system、const、eq_reg、ref、range、index 和 all。
查詢條件字段涉及到的索引,可能沒有使用。
實際使用的索引。如果為 null,則沒有使用索引。
表示索引中使用的位元組數,查詢中使用的索引的長度(最大可能長度),並非實際使用長度,理論上長度越短越好。key_len 是根據表定義計算而得的,不是通過表內檢索出的。
顯示索引的哪一列被使用了,如果可能的話,是乙個常量 const。
根據表統計資訊及索引選用情況,大致估算出找到所需的記錄所需要讀取的行數。
顯示了通過條件過濾出的行數的百分比估計值。
mysql 如何解析查詢的額外資訊。
not exists:mysql 能夠對查詢進行 left join 優化,發現 1 個匹配 left join 標準的行後,不再為前面的的行組合在該錶內檢查更多的行。
range checked for each record (index map: #):mysql 沒有發現好的可以使用的索引,但發現如果來自前面的表的列值已知,可能部分索引可以使用。
using filesort:mysql 需要額外的一次傳遞,以找出如何按排序順序檢索行。
using index:從只使用索引樹中的資訊而不需要進一步搜尋讀取實際的行來檢索表中的列資訊。
using temporary:為了解決查詢,mysql 需要建立乙個臨時表來容納結果。
using where:where 子句用於限制哪乙個行匹配下乙個表或傳送到客戶。
using sort_union(...), using union(...), using intersect(...): 這 些 函 數說明如 何 為index_merge 聯接型別合併索引掃瞄。
using index for group-by:類似於訪問表的 using index 方式,using index for group-by 表示
mysql 發現了乙個索引,可以用來查 詢group by 或distinct 查詢的所有列,而不要額外搜尋硬碟訪問實際的表。
ocacle 執行計畫 Oracle執行計畫
一 什麼是oracle執行計畫?執行計畫是一條查詢語句在oracle中的執行過程或訪問路徑的描述 二 怎樣檢視oracle執行計畫?因為我一直用的plsql遠端連線的公司資料庫,所以這裡以plsql為例 配置執行計畫需要顯示的項 工具 首選項 視窗型別 計畫視窗 根據需要配置要顯示在執行計畫中的列 ...
mysql執行計畫 MySQL 執行計畫
1.執行計畫的定義 什麼是執行計畫 查詢計畫 呢?執行計畫就是一系列的操作步驟。sql是宣告性語言,它只告訴資料庫要查詢什麼,但並不告訴資料庫如何去查。資料庫所要做的就是基於演算法和統計資訊計算出一條最佳的訪問路徑。這個工作是由優化器來完成的。優化器會比較不同的執行計畫,然後選擇其中最優的一套。2....
mysql 生成執行計畫 MySQL執行計畫
和很多其他關係型資料庫不通,mysql並不會在生成查詢位元組碼來執行查詢。mysql生成查詢的一棵指令樹,然後通過儲存引擎執行完成這棵指令樹並返回結果。最終的執行計畫包含了重構查詢的全部資訊。如果某個查詢執行explain extended 之後,在執行show warnings,就可以看到重構出的...