mysql extra 为空_运行EXPLAIN时,如果key的字段值不为null但Extra为空,是否使用了key?...

bd96500e110b49cbb3cd949968f18be7.png

When running this EXPLAIN query without an index

EXPLAIN SELECT exec_date,

100 * SUM(CASE WHEN cached = 'no' THEN 1 ELSE 0 END) / SUM(1) cached_no,

100 * SUM(CASE WHEN cached != 'no' THEN 1 ELSE 0 END) / SUM(1) cached_yes

FROM requests

GROUP BY exec_date

This is the output

id select_type table type possible_keys key key_len ref rows Extra

1 SIMPLE requests ALL NULL NULL NULL NULL 478619 Using temporary; Using filesort

If I create an index

ALTER TABLE requests ADD INDEX exec_date(exec_date);

The output is

id select_type table type possible_keys key key_len ref rows Extra

1 SIMPLE requests index NULL exec_date 4 NULL 497847

Since the value of Extra is blank, does that mean the key exec_date is not being used?

On a test server, the execution time of the actual (not the EXPLAIN statement) query with and without the index is the same.

解决方案

Using index doesn't mean what you think it means. If it is present in the Extra column, it indicates that the optimizer isn't actually reading the entire rows, it is using the index (exclusively) to find column information.

The key could still be in use for other things, for example to perform lookups if you have a WHERE clause etc. In your specific scenario, for example, the disappearance of the Using temporary; actually does mean that your index is being utilized, since MySQL no longer needs to rearrange the contents of your table into a new temporary table to perform the GROUP BY.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
mysqlkey_len是通过计算索引字段的长度来得出的。具体计算方法如下: 1. 如果索引字段是字符串类型(如varchar、text等),则key_len等于字段的最大长度。例如,如果一个字段的类型是varchar(100),则key_len为100。 2. 如果索引字段是数值类型(如int、bigint等),则key_len等于该字段的存储长度。例如,如果一个字段的类型是int(10),则key_len为4(因为int类型占用4个字节)。 3. 如果索引字段是日期类型(如date、datetime等),则key_len等于8。 需要注意的是,key_len只计算了索引字段的长度,并不包括其他字段的长度。 总的来说,key_len代表了索引字段所占用的字节数,用来评估索引的大小和性能。较小的key_len值通常意味着更高效的索引操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [浅谈mysql explainkey_len的计算方法](https://download.csdn.net/download/weixin_38524871/13700618)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [MySQL优化篇:执行计划explainkey_len计算方式](https://blog.csdn.net/u012068483/article/details/105270813)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值