MySQL解释JSON输出格式

wn9m85ua  于 2023-01-01  发布在  Mysql
关注(0)|答案(1)|浏览(165)

有人能解释一下MySQL中EXPLAIN FORMAT=JSON输出中的query_costcost_info字段是什么吗?我知道MySQL成本是用表mysql . server_costmysql . engine_cost中定义的成本值计算的,但我不明白query_costread_cost,第一个月9日第一个月、第一个月10日第一个月、第一个月11日第一个月
添加了一个EXPAIN FORMAT=JSON输出示例以供参考。我做了一个非常简单的查询,如下所示

EXPLAIN FORMAT=JSON SELECT * FROM test WHERE id >= 1 and id <= 9;

输出是...

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "2.06"
    },
    "table": {
      "table_name": "test",
      "access_type": "range",
      "possible_keys": [
        "PRIMARY"
      ],
      "key": "PRIMARY",
      "used_key_parts": [
        "id"
      ],
      "key_length": "4",
      "rows_examined_per_scan": 9,
      "rows_produced_per_join": 9,
      "filtered": "100.00",
      "cost_info": {
        "read_cost": "1.16",
        "eval_cost": "0.90",
        "prefix_cost": "2.06",
        "data_read_per_join": "288"
      },
      "used_columns": [
        "id",
        "catIds"
      ],
      "attached_condition": "((`test_dec_2022`.`test`.`id` >= 1) and (`test_dec_2022`.`test`.`id` <= 9))"
    }
  }
}

理解MySQL解释语句的JSON格式输出。

lskq00tm

lskq00tm1#

我一直在调查这个问题,试图回答它,但我有点失望。
2012年有一个错误(https://bugs.mysql.com/bug.php?id=67023),“解释格式=json输出未记录”。
到2015年,该漏洞被关闭,一个回复声称他们正在向文档中添加一些示例。
我添加了一些关于EXPLAIN输出列名的JSON等价物的信息;这个应该很快就会上线。我会在时间允许的时候添加一些例子和其他东西。
https://dev.mysql.com/doc/refman/en/explain-output.html中显示的只是该响应提供的内容:JSON输出中与传统EXPLAIN字段等价的字段名列表。2但是没有JSON格式中新的字段的文档,比如你提到的成本字段。
我没有在MySQL手册中找到任何描述那些字段的内容,我也读了几篇关于EXPLAIN JSON格式的博客,但到目前为止我看到的都没有描述成本字段。
我查了源代码。找到的最接近的是:
https://github.com/mysql/mysql-server/blob/8.0/sql/opt_explain_format.h#L311-L315

column<double> col_read_cost;  ///< Time to read the table
  /// Cost of the partial join including this table
  column<double> col_prefix_cost;
  /// Cost of evaluating conditions on this table per query
  column<double> col_cond_cost;

我猜这些变量最终会变成read_costprefix_costeval_cost,这些简短的注解(实际上是句子片段)是我找到的唯一描述。

相关问题