mysql 優化索引 過程 explain profiling optimizer_trace

1. 首先拿到執行的sql語句,使用myslq自帶的explain命令,使用explain 查看執行計劃,

explain  select * from cc_ci where id = '200000000140094'  
或 以json格式顯示
explain format=json select * from cc_ci where id = '200000000140094'   
 

在這裏插入圖片描述

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "1.00"
    } /* cost_info */,
    "table": {
      "table_name": "cc_ci",
      "access_type": "const",
      "possible_keys": [
        "PRIMARY"
      ] /* possible_keys */,
      "key": "PRIMARY",
      "used_key_parts": [
        "ID"
      ] /* used_key_parts */,
      "key_length": "8",
      "ref": [
        "const"
      ] /* ref */,
      "rows_examined_per_scan": 1,
      "rows_produced_per_join": 1,
      "filtered": "100.00",
      "cost_info": {
        "read_cost": "0.00",
        "eval_cost": "0.20",
        "prefix_cost": "0.00",
        "data_read_per_join": "5K"
      } /* cost_info */,
      "used_columns": [
        "ID",
        "CI_CODE",
        "CI_DESC",
        "CLASS_ID",
        "SOURCE_ID",
        "OWNER_ID",
        "ORG_ID",
        "SUB_CLASS",
        "CI_VERSION",
        "HASH_CODE",
        "CI_PRIMARY_KEY",
        "CUSTOM_1",
        "CUSTOM_2",
        "CUSTOM_3",
        "CUSTOM_4",
        "CUSTOM_5",
        "CUSTOM_6",
        "ATTRS_STR",
        "DOMAIN_ID",
        "DATA_STATUS",
        "CREATOR",
        "MODIFIER",
        "CREATE_TIME",
        "MODIFY_TIME"
      ] /* used_columns */
    } /* table */
  } /* query_block */
}

2. 使用profiling詳細的列出在每一個步驟消耗的時間,前提是先執行一遍語句。

#打開profiling 的設置
SET profiling = 1;
SHOW VARIABLES LIKE '%profiling%';

#查看隊列的內容
show profiles;  
#來查看統計信息
show profile block io,cpu for query 3;

3. Optimizer trace是MySQL5.6添加的新功能,可以看到大量的內部查詢計劃產生的信息, 先打開設置,然後執行一次sql,最後查看information_schema.OPTIMIZER_TRACE的內容

#打開設置
SET optimizer_trace='enabled=on';  

#最大內存根據實際情況而定, 可以不設置
SET OPTIMIZER_TRACE_MAX_MEM_SIZE=1000000;
SET END_MARKERS_IN_JSON=ON;
SET optimizer_trace_limit = 1;
SHOW VARIABLES LIKE '%optimizer_trace%';

#執行sql
select * from cc_ci where id = '200000000140094' 

#執行所需sql後,查看該表信息即可看到詳細的執行過程
SELECT * FROM `information_schema`.`OPTIMIZER_TRACE`;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章