【问题标题】:MySQL explain filtered column jumping 4,100 with indexMySQL用索引解释过滤列跳跃4,100
【发布时间】:2011-05-07 14:35:54
【问题描述】:

我的查询:

EXPLAIN EXTENDED SELECT  `artwork`.`id` ,  `artwork`.`added` 
FROM  `artwork` 
ORDER BY  `artwork`.`added` DESC 
LIMIT 0 , 6

当我在“已添加”上添加索引以避免使用 filesort 并使用 index 代替时,解释的输出来自

id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE artwork ALL NULL NULL NULL NULL 302 100.00 Using filesort

id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE artwork index NULL added 4 NULL 6 5033.33  

我担心过滤后的人数会增加大约 4,100 - 我在 Google 上找不到 filtered 的含义

【问题讨论】:

    标签: mysql query-optimization sql-execution-plan


    【解决方案1】:

    嘿,这实际上是个好消息。它显示了您的限制从结果集中删除了多少行。在这种情况下,这将是您的 LIMIT 声明。 See the manual:

    filtered 列表示表行的估计百分比 将被表格过滤 健康)状况。也就是说,rows 显示 估计检查的行数和 rows × filtered / 100 显示数量 将被连接的行数 以前的表。这个专栏是 如果您使用 EXPLAIN EXTENDED,则会显示。

    【讨论】:

    • 好吧,你说的很好,但我还是不太明白是什么意思……
    • @Webnet 这意味着,如果没有您的 LIMIT 子句,则将返回 filtered% additional 行。尝试删除您的 LIMIT 子句,您会看到过滤后的数字下降到 0 并且 rows 成为表中的总行数。
    【解决方案2】:

    来自docs

    filtered

    filtered 列表示将按表条件过滤的表行的估计百分比。也就是说,rows 显示检查的估计行数,rows × filtered / 100 显示将与以前的表连接的行数。如果您使用EXPLAIN EXTENDED,则会显示此列。 (MySQL 5.1.12 中的新功能)

    基本上,它是返回的记录与获取的记录的比率。

    其目标是展示您的 WHERE / ON 条件的选择性以及在它们上创建索引的好处。

    请注意,此字段对于带有 LIMIT 的查询几乎没有意义,因为它总是在不考虑 LIMIT 子句的情况下计算,而 rows 是根据后者计算的。

    【讨论】:

      猜你喜欢
      • 2015-06-09
      • 2010-12-13
      • 2018-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-06
      • 1970-01-01
      • 2020-10-12
      相关资源
      最近更新 更多