【发布时间】:2021-01-13 20:06:35
【问题描述】:
EXPLAIN 仅显示密钥长度。
例如:
我们在一个表上有一个复杂的索引。
IDX_KEY (col1, col2, col3)(让我们所有的列都是整数类型)
如果键长度(来自“解释”输出)= 4,则查询中仅使用 IDX_KEY 索引的 col1。
如果为 8,则为 col1 和 col2。
如果为 12,则使用索引中的所有列。
我的问题:有没有一种方法可以在不计算的情况下确定列列表?
UPD:
真正的表有很多字段和索引。但是例如,让它有这样的定义:CREATE TABLE `tbl` (`col1` unsigned int not null,`col2` unsigned int not null,`col3` unsigned int not null, primary key (`col1`,`col2`,`col2`));
那么解释可以是这样的(如果只使用索引中的一列):
"id" "select_type" "table" "type" "possible_keys" "key" "key_len" "ref" "rows" "Extra"
"1" "PRIMARY" "tbl" "range" "PRIMARY" "PRIMARY" "4" \N "1" ""
【问题讨论】:
-
请添加您的表定义和说明。我不明白您的问题“确定列列表”是什么意思?
-
@P.Salmon OP 想知道查询中使用了多列索引中的哪些列。可能是优化索引的有趣数据点。
-
样本定义已添加到问题中
-
解释和解释扩展没有这个信息。您是否尝试过跟踪优化器并查看该输出是否包含此信息?
-
我只需要了解是否有任何方法可以在不使用 key_len 计算的情况下获取所选索引中使用的列列表。我还不需要做一些优化 - 只需获取列列表。