MySQL的解释过滤列索引
问题描述:
跳4100
我的查询:MySQL的解释过滤列索引
EXPLAIN EXTENDED SELECT `artwork`.`id` , `artwork`.`added`
FROM `artwork`
ORDER BY `artwork`.`added` DESC
LIMIT 0 , 6
当我加入的“补充”的指数,以避免使用filesort
和使用index
,而不是解释的输出从
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE artwork ALL NULL NULL NULL NULL 302 100.00 Using filesort
去
至
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE artwork index NULL added 4 NULL 6 5033.33
我很关心过滤器上升pproximently 4,100 - 我无法找到谷歌什么filtered
意味着
答
嘿,这实际上是个好消息。它显示了您的限制从结果集中移除的行数。在这种情况下,这将是您的LIMIT
声明。 See the manual:
的
filtered
列指示将由表 条件进行滤波表中的行 的估计百分比。即,示出了rows
检查行 估计数目和rows
×filtered
/100示出了将与 先前的表被接合的行数 。如果您使用EXPLAIN EXTENDED,则此列将显示为 。
答
从docs:
filtered
的
filtered
列指示表中的行的估计百分比将由表条件进行过滤。即,rows
显示了检查的估计行数,rows × filtered/100
显示了将与先前表连接的行数。如果您使用EXPLAIN EXTENDED
,则显示此列。 (MySQL 5.1.12中的新功能)
基本上,它是返回记录的比率。
它的目标是显示您的选择条件是如何选择的,以及在它们上创建索引的好处。
请注意,该字段对LIMIT
的查询没什么意义,因为它始终计算时不考虑LIMIT
子句,而rows
是关于后者计算的。
好的,你说这很好,但我还是不太明白它的意思...... – Webnet 2010-11-10 00:29:07
@Webnet这意味着,如果没有你的'LIMIT'子句,将会返回'filtered'%__additional__行代替。尝试删除你的'LIMIT'子句,你会看到过滤后的数字降到0,'rows'成为表中的总行数。 – 2010-11-10 00:30:55