Source http://dev.mysql.com/doc/refman/5.5/en/explain-output.html#explain_filtered http://dev.mysql.com/doc/refman/5.5/en/explain-output.html#explain_filtered
过滤后的列表示表行的估计百分比
将通过表条件进行过滤。也就是说,行显示
估计检查的行数和行数 × 过滤/100 显示
将与以前的表连接的行数。本专栏
如果您使用,则会显示解释扩展 http://dev.mysql.com/doc/refman/5.5/en/explain-extended.html.
在过滤中,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,则意味着查询正在查找表中的所有可用行。