2016-10-15 3 views

答えて

0

この:

INDEX(customer_id, -- '=' comes first 
     state,   -- 'IN' sometimes works ok in the middle 
     start_datetime) -- nothing after a 'range' will be used 

実行EXPLAIN SELECT ...それはおそらくOther欄に "MRRを" と言うだろう。私はこれを「飛躍」の最適化と呼んでいます。あなたのケースでは、1234 & '未確認' & 00:00のインデックス行の先頭に簡単に到達します。次に、その日の連続したエントリをスキャンします。

次に、1234 &に'00:00をもう一度スキャンすると確認されます。

これは、2つのBTreeプローブをインデックスに追加し、2つのインデックススキャンを追加します。非常に効率的です。

次に、インデックスの各行に対して、(PRIMARY KEYを使用して)到達し、必要な他の列を取得します。

日付&時間帯のための推奨パターン:

AND c.start_datetime >= '2016-10-15' 
AND c.start_datetime < '2016-10-15' + INTERVAL 1 DAY 
関連する問題