2012-01-11 10 views
0

私はそれに130Millの行を持つテーブルがあります。私がクエリをEXPLAINすると、rowns列に130Millが表示されます。このEXPLAIN計画を理解する方法..?それは私に混乱して見ている

EXPLAIN SELECT * FROM TABLE1; 

行:130ミル

しかし、それは1900年と2000年

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

列の間TABLE1.time_dim_idにWHERE条件を追加するとき:午前は驚いているのはなぜ60Mill

があるためでありますこのtime_dim_id値のNULL値はなく、 分(time_dim_id)は1900であり、 max(time_dim_id)は2000です。

2番目のEXPLAINプランの行セクションの130Mill行が表示されないのはなぜですか?

+1

上の指標もあると仮定し? –

答えて

1

あなたはEXPLAIN再び

ANALYZE TABLE TABLE1 

を試してみて - これはあなたがそれにインデックスを持っているためか、TABLE1.time_dim_id

+0

はい、他の属性とともに、time_dim_idにCOMPOSITE PRIMARYキーがあります。 >しかし、WHERE句では、すべての行がその範囲の間に来るように、私はそのような時間スケールを与えました。どのようにインデックスがスキャンされる行を減らすのでしょうか? – Uday

+1

MySQLがテーブルを分析していない限り、どれくらいの行がどのタイムパンに含まれているかを表すことはできないため、推定する必要があります。 ANALAYZE TABLEは索引範囲を読み取るため、より正確な精度が得られます。 –

関連する問題