2012-01-11 35 views
0

我有一個130Mill行的表。當我解釋查詢時,它顯示130mill在rowns列。如何理解這個EXPLAIN計劃..?這看起來讓我感到困惑

EXPLAIN SELECT * FROM TABLE1; 

行:130廠

但是,當它與TABLE1.time_dim_id WHERE條件添加1900和2000

EXPLAIN SELECT * FROM TABLE1 WHERE time_dim_id between 1900 and 2000 ; 

行之間:60Mill

爲什麼我很驚訝,因爲,此time_dim_id值不存在NULL值,並且最小值(time_dim_id)爲1900,而最大值(time_dim_id)爲012.

爲什麼不在第二個EXPLAIN計劃的行部分再次顯示130行?

+1

指數也,可能是因爲你有它的指數? – 2012-01-11 13:26:16

回答

1

嘗試

ANALYZE TABLE TABLE1 

,然後再你解釋 - 這個假設有在TABLE1.time_dim_id

+0

是的,time_dim_id上有一個COMPOSITE PRIMARY鍵以及其他一些屬性。 >但是在WHERE子句中,我給出了這樣一個時間尺度,以便每行應該在這個範圍之間。這裏的索引如何減少正在掃描的行....? – Uday 2012-01-11 14:04:56

+1

只要MySQL沒有分析表格,它就不能說有多少行在哪個時間範圍內,因此它必須估計。 ANALAYZE TABLE將讀取索引範圍,因此提供更好的準確性。 – 2012-01-11 14:18:36