2014-04-09 69 views
8

我一直在尋找這一點,他們所有的狀態某種比例,說明這一點:MySQL的EXPLAIN EXTENDED過濾柱(顯然它不是一個百分比)

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 

For count(*)

是的我想要最後20行,AccessId是自動遞增的主鍵。

9295是什麼意思!?

回答

12

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

所以20%的意思是...... 80%的意思是...(表現對比)如果它是* ahem *超過9000! –

+0

@AlecTeal你沒有得到它的計算方式。檢查我更新的答案! –

+0

那麼過濾= 78是什麼意思? (另外,我猜行數是它實際查看的數字,而不是查詢返回的數據,那麼78%的數據表示它看起來有78%的數據是有用的 - 如此高的數值意味着它在數據中使用了很多?) –

-4

當EXPLAIN與EXTENDED關鍵字一起使用時,輸出將包含未顯示的過濾列。此列表示將由表條件過濾的錶行的估計百分比。