MySQL用索引解释过滤列跳跃4,100

时间:2010-11-10 00:22:11

标签: mysql query-optimization sql-execution-plan

我的查询:

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  

并且我担心过滤的上升大约是4,100 - 我在Google上找不到filtered的含义

2 个答案:

答案 0 :(得分:6)

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

  

filtered列表示表行的估计百分比   将由表格过滤   条件。也就是说,rows显示了   估计的行数和   rows×filtered / 100显示了该数字   将与之连接的行数   以前的表格。这一栏是   如果您使用EXPLAIN EXTENDED,则会显示。

答案 1 :(得分:3)

来自docs

  

filtered

     

filtered列表示将按表条件过滤的表行的估计百分比。也就是说,rows显示已检查的估计行数,rows × filtered / 100显示将与之前的表连接的行数。如果您使用EXPLAIN EXTENDED,则会显示此列。 (MySQL 5.1.12中的新功能)

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

其目标是展示您的WHERE / ON条件的选择性以及为其创建索引的好处。

请注意,此字段对于使用LIMIT的查询几乎没有意义,因为它总是在不考虑LIMIT子句的情况下计算,rows根据后者进行计算。 / p>