8.5 trace分析优化器执行计划

目录

    MySQL5.6提供了对SQL的跟踪trace, 通过trace文件能够进一步了解为什么优化器选择A计划, 而不是选择B计划。

    打开trace , 设置格式为 JSON,并设置trace最大能够使用的内存大小,避免解析过程中因为默认内存过小而不能够完整展示。

    SET optimizer_trace="enabled=on",end_markers_in_json=on;
    set optimizer_trace_max_mem_size=1000000;

    执行SQL语句 :

    select * from tb_item where id < 4;

    最后, 检查information_schema.optimizer_trace就可以知道MySQL是如何执行SQL的 :

    select * from information_schema.optimizer_trace\G;
    *************************** 1. row ***************************
    QUERY: select * from tb_item where id < 4
    TRACE: {
    "steps": [
    {
    "join_preparation": {
    "select#": 1,
    "steps": [
    {
    "expanded_query": "/* select#1 */ select `tb_item`.`id` AS `id`,`tb_item`.`title` AS `title`,`tb_item`.`price` AS `price`,`tb_item`.`num` AS `num`,`tb_item`.`categoryid` AS `categoryid`,`tb_item`.`status` AS `status`,`tb_item`.`sellerid` AS `sellerid`,`tb_item`.`createtime` AS `createtime`,`tb_item`.`updatetime` AS `updatetime` from `tb_item` where (`tb_item`.`id` < 4)"
    }
    ] /* steps */
    } /* join_preparation */
    },
    {
    "join_optimization": {
    "select#": 1,
    "steps": [
    {
    "condition_processing": {
    "condition": "WHERE",
    "original_condition": "(`tb_item`.`id` < 4)",
    "steps": [
    {
    "transformation": "equality_propagation",
    "resulting_condition": "(`tb_item`.`id` < 4)"
    },
    {
    "transformation": "constant_propagation",
    "resulting_condition": "(`tb_item`.`id` < 4)"
    },
    {
    "transformation": "trivial_condition_removal",
    "resulting_condition": "(`tb_item`.`id` < 4)"
    }
    ] /* steps */
    } /* condition_processing */
    },
    {
    "table_dependencies": [
    {
    "table": "`tb_item`",
    "row_may_be_null": false,
    "map_bit": 0,
    "depends_on_map_bits": [
    ] /* depends_on_map_bits */
    }
    ] /* table_dependencies */
    },
    {
    "ref_optimizer_key_uses": [
    ] /* ref_optimizer_key_uses */
    },
    {
    "rows_estimation": [
    {
    "table": "`tb_item`",
    "range_analysis": {
    "table_scan": {
    "rows": 9816098,
    "cost": 2.04e6
    } /* table_scan */,
    "potential_range_indices": [
    {
    "index": "PRIMARY",
    "usable": true,
    "key_parts": [
    "id"
    ] /* key_parts */
    }
    ] /* potential_range_indices */,
    "setup_range_conditions": [
    ] /* setup_range_conditions */,
    "group_index_range": {
    "chosen": false,
    "cause": "not_group_by_or_distinct"
    } /* group_index_range */,
    "analyzing_range_alternatives": {
    "range_scan_alternatives": [
    {
    "index": "PRIMARY",
    "ranges": [
    "id < 4"
    ] /* ranges */,
    "index_dives_for_eq_ranges": true,
    "rowid_ordered": true,
    "using_mrr": false,
    "index_only": false,
    "rows": 3,
    "cost": 1.6154,
    "chosen": true
    }
    ] /* range_scan_alternatives */,
    "analyzing_roworder_intersect": {
    "usable": false,
    "cause": "too_few_roworder_scans"
    } /* analyzing_roworder_intersect */
    } /* analyzing_range_alternatives */,
    "chosen_range_access_summary": {
    "range_access_plan": {
    "type": "range_scan",
    "index": "PRIMARY",
    "rows": 3,
    "ranges": [
    "id < 4"
    ] /* ranges */
    } /* range_access_plan */,
    "rows_for_plan": 3,
    "cost_for_plan": 1.6154,
    "chosen": true
    } /* chosen_range_access_summary */
    } /* range_analysis */
    }
    ] /* rows_estimation */
    },
    {
    "considered_execution_plans": [
    {
    "plan_prefix": [
    ] /* plan_prefix */,
    "table": "`tb_item`",
    "best_access_path": {
    "considered_access_paths": [
    {
    "access_type": "range",
    "rows": 3,
    "cost": 2.2154,
    "chosen": true
    }
    ] /* considered_access_paths */
    } /* best_access_path */,
    "cost_for_plan": 2.2154,
    "rows_for_plan": 3,
    "chosen": true
    }
    ] /* considered_execution_plans */
    },
    {
    "attaching_conditions_to_tables": {
    "original_condition": "(`tb_item`.`id` < 4)",
    "attached_conditions_computation": [
    ] /* attached_conditions_computation */,
    "attached_conditions_summary": [
    {
    "table": "`tb_item`",
    "attached": "(`tb_item`.`id` < 4)"
    }
    ] /* attached_conditions_summary */
    } /* attaching_conditions_to_tables */
    },
    {
    "refine_plan": [
    {
    "table": "`tb_item`",
    "access_type": "range"
    }
    ] /* refine_plan */
    }
    ] /* steps */
    } /* join_optimization */
    },
    {
    "join_execution": {
    "select#": 1,
    "steps": [
    ] /* steps */
    } /* join_execution */
    }
    ] /* steps */
    }
    posted @   Lz_蚂蚱  阅读(62)  评论(0编辑  收藏  举报
    点击右上角即可分享
    微信分享提示
    评论
    收藏
    关注
    推荐
    深色
    回顶
    收起