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`;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章