MySQL EXPLAIN EXTENDED过滤列(显然不是百分比)

时间:2014-04-09 17:22:39

标签: mysql explain

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

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

对于count(*)

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

9295是什么意思!?

2 个答案:

答案 0 :(得分:17)

来源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,则表示查询正在查找表中的所有可用行。

答案 1 :(得分:-4)

当EXPLAIN与EXTENDED关键字一起使用时,输出包含未显示的过滤列。此列指示将按表条件过滤的表行的估计百分比。