【问题标题】:MySQL EXPLAIN EXTENDED filtered column (obviously it's not a percentage)MySQL EXPLAIN EXTENDED 过滤列(显然不是百分比)
【发布时间】:2014-05-23 01:48:55
【问题描述】:

我一直在寻找这个,他们都说某种百分比,解释一下:

EXPLAIN EXTENDED SELECT * FROM PageAccess ORDER BY AccessId DESC LIMIT 20;
SELECT COUNT(*) FROM PageAccess;

给予:

id, select_type, table, type, possible_keys, key, key_len, ref, rows, filtered, Extra
1, 'SIMPLE', 'PageAccess', 'index', '', 'PRIMARY', '4', '', 20, 9295.00, ''

(是,过滤 = 9295.00)

和:

1830

对于计数(*)

是的,我想要最后 20 行,AccessId 是自动递增的主键。

9295是什么意思!?

【问题讨论】:

    标签: mysql explain


    【解决方案1】:

    来源http://dev.mysql.com/doc/refman/5.5/en/explain-output.html#explain_filtered

    过滤后的列表示表格行的估计百分比 将由表条件过滤。也就是说,行显示 估计检查的行数和行 × 过滤 / 100 显示 将与以前的表连接的行数。本栏目 如果您使用EXPLAIN EXTENDED,则会显示。

    在过滤后的 100% 表示此表中的所有行都被过滤。 因此,获得更高的价值并不令人担忧,因为这是一个好兆头,意味着它 不必从表中读取尽可能多的数据。

    这是它的计算方式。假设我有一个名为 users 的表,让我们对其进行一些分析。

    mysql> select count(*) from users ;
    +----------+
    | count(*) |
    +----------+
    |    79309 |
    +----------+
    

    您可以看到表格中有 79309 行。现在让我们运行解释

    mysql> explain extended select * from users order by idusers desc limit 20 ;
    +----+-------------+-------+-------+---------------+---------+---------+------+------+-----------+-------+
    | id | select_type | table | type  | possible_keys | key     | key_len | ref  | rows | filtered  | Extra |
    +----+-------------+-------+-------+---------------+---------+---------+------+------+-----------+-------+
    |  1 | SIMPLE      | users | index | NULL          | PRIMARY | 4       | NULL |   20 | 396545.00 |       |
    +----+-------------+-------+-------+---------------+---------+---------+------+------+-----------+-------+
    

    现在想知道为什么filtered = 396545.00

    计算很简单。

    表格的总行数 = 79309 说它的 tx。

    解释显示 rows = 20 表示它的 tx1。

    过滤后的计算方式为

    (tx / tx1)*100 = 396545.00
    

    因此,如果此值很高,则表示查询很好,并且没有从表中读取所有内容。

    所以不要混淆这不是查询将查看的行数,它是相对于获取的行数可用的行数的百分比计算。

    如果变为 100,则表示查询正在查找表中的所有可用行。

    【讨论】:

    • 所以 20% 意味着...... 80% 意味着......(显示对比)如果它是 ahem OVER 9000!
    • @AlecTeal 你不知道它是如何计算的。检查我更新的答案!
    • 那么过滤=78 是什么意思? (另外,我猜 rows 是它实际查看的数字,而不是查询返回的数字。然后,它查看的 78% 中的 78% 表示有用 - 如此高的值意味着它从数据中得到了很多使用?)
    • 文档说“行 × 过滤 / 100 显示将与前一个表连接的行数”......所以较低的 filtered 数字不会意味着更少的行被连接导致更快的查询?
    • @AbhikChakraborty - 我多年来一直在运行解释扩展,我从未见过高于 100 的任何东西。只有更低。由于它是一个百分比,表示连接所需的行数,它不能高于 100%。您在上面给出的示例 actual 是否解释了查询的输出?如果是这样,您使用的是什么版本的 MySQL,因为它没有任何意义。
    猜你喜欢
    • 2012-01-29
    • 2017-03-25
    • 2021-11-10
    • 2011-02-14
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多