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)
过滤后的列是什么意思,数字应该高还是低?是的,我已经阅读了文档,但我不太明白这个数字表示什么或者哪些值被认为是可取的。
答案 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)一书中有一个附录表明优化器目前仅对filtered
,ALL
,{index
使用此估算值(range
) {1}}和index_merge
访问方法。