我一直在寻找这个,他们都说了某种百分比,解释一下:
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是什么意思!?
答案 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关键字一起使用时,输出包含未显示的过滤列。此列指示将按表条件过滤的表行的估计百分比。