2010-11-10 57 views
6
跳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意味着

回答

6

嘿,这实际上是个好消息。它显示了您的限制从结果集中移除的行数。在这种情况下,这将是您的LIMIT声明。 See the manual

filtered列指示将由表 条件进行滤波表中的行 的估计百分比。即,示出了rows检查行 估计数目和 rows×filtered/100示出了将与 先前的表被接合的行数 。如果您使用EXPLAIN EXTENDED,则此列将显示为 。

+0

好的,你说这很好,但我还是不太明白它的意思...... – Webnet 2010-11-10 00:29:07

+1

@Webnet这意味着,如果没有你的'LIMIT'子句,将会返回'filtered'%__additional__行代替。尝试删除你的'LIMIT'子句,你会看到过滤后的数字降到0,'rows'成为表中的总行数。 – 2010-11-10 00:30:55

3

docs

filtered

filtered列指示表中的行的估计百分比将由表条件进行过滤。即,rows显示了检查的估计行数,rows × filtered/100显示了将与先前表连接的行数。如果您使用EXPLAIN EXTENDED,则显示此列。 (MySQL 5.1.12中的新功能)

基本上,它是返回记录的比率。

它的目标是显示您的选择条件是如何选择的,以及在它们上创建索引的好处。

请注意,该字段对LIMIT的查询没什么意义,因为它始终计算时不考虑LIMIT子句,而rows是关于后者计算的。