EXPLAIN的查询的过滤列在MySQL中意味着什么?

时间:2010-06-29 21:08:32

标签: mysql

mysql> EXPLAIN EXTENDED SELECT * FROM table WHERE column = 1 LIMIT 10;
+----+-------------+----------+------+---------------+--------------+---------+-------+--------+----------+-------+
| id | select_type | table    | type | possible_keys | key          | key_len | ref   | rows   | filtered | Extra |
+----+-------------+----------+------+---------------+--------------+---------+-------+--------+----------+-------+
|  1 | SIMPLE      | table    | ref  | column        | column       | 1       | const | 341878 |   100.00 |       |
+----+-------------+----------+------+---------------+--------------+---------+-------+--------+----------+-------+
1 row in set, 1 warning (0.00 sec)

过滤后的列是什么意思,数字应该高还是低?是的,我已经阅读了文档,但我不太明白这个数字表示什么或者哪些值被认为是可取的。

1 个答案:

答案 0 :(得分:5)

filtered列是估计的百分比,指定将与上一个表连接的行数。在你的情况下,它是100%,即所有行。

正如您所知,rows是对查询检查的行数的估计,因此rows x filtered / 100将是必须进行的连接数(行数)在应用表格条件后离开。

有关其他信息,请参阅What's New in MySQL Optimizer - What's new in MySQL Query Optimizer(幻灯片10)。

修改

High performance MySQL (2nd edition)一书中有一个附录表明优化器目前仅对filteredALL,{index使用此估算值(range) {1}}和index_merge访问方法