1. 程式人生 > 其它 >8.5 trace分析優化器執行計劃

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 */
    }