You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL EXPLAIN中Filtered列的理想取值是多少?版本差异解析

MySQL EXPLAIN中Filtered列的解读与理想取值

基础概念回顾

rows表示预估检查的行数,rows × filtered / 100表示将与前表连接的行数。

你在MySQL 5.6和8.0中执行了以下查询:

Explain SELECT * FROM  test_source ts WHERE ts.host_id=2 and ts.eventsource_id in( 1,19) limit 1;

发现两个版本的Filtered列结果存在差异:MySQL 5.6中该列显示为100,MySQL 8.0的结果如附图所示。

Filtered列的理想取值与查询成本分析

  • Filtered列是优化器预估的符合WHERE条件的行数占预估检查行数的百分比,取值范围在0到100之间。
  • 理想取值是100:这意味着优化器认为所有被检查的行都满足过滤条件,没有无效数据需要剔除,通常对应索引能精准匹配所有过滤条件的场景(比如你在5.6中遇到的情况,可能优化器判定现有索引完全覆盖了host_id=2和eventsource_id IN(1,19)的条件)。
  • 取值越低,说明需要过滤的无效行占比越高,理论上查询需要处理的冗余数据越多,成本越高。但要注意,这只是优化器的预估结果,实际查询成本还要结合rows数值、索引类型、是否有LIMIT等因素综合判断——比如你的查询带了LIMIT 1,即便Filtered值不高,优化器也可能快速定位到第一行符合条件的数据,实际执行成本未必高。

版本差异的原因

MySQL 8.0的优化器统计模型和预估逻辑比5.6更精细,会更准确地评估过滤条件的实际匹配比例;而5.6的优化器在部分场景下(比如索引覆盖部分过滤条件时)可能会直接给出100的预估值,这是不同版本优化器迭代带来的正常差异。

内容的提问来源于stack exchange,提问作者Avyaan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 04:40:27