2010-11-10 48 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是關於後者計算的。