2016-10-28 12 views
-1

は、私が理解できないんだけど、問題を抱えている... 私は2つのクエリ(データベースがすべてのCDRデータに一つだけのテーブルで、MySQLのです)があります。アスタリスクは

を0.05秒と別の1で実行
SELECT * FROM cdr WHERE userfield LIKE 'audio:%' 
    AND (calldate >= '2016-10-26 00:00:00' 
    AND calldate <= '2016-10-26 23:59:59') 
    AND duration > 8 
ORDER BY uniqueid DESC LIMIT 200 OFFSET 0; 

SELECT * FROM cdr WHERE userfield LIKE 'audio:%' 
    AND (calldate >= '2016-10-26 15:00:00' 
    AND calldate <= '2016-10-26 16:00:00') 
    AND duration > 8 
ORDER BY uniqueid DESC LIMIT 200 OFFSET 0; 

39.12秒で実行されます! (唯一の相違点はcalldateフィールドにあることに注意してください)

私は実際にMySQLのパフォーマンスについてよく知らないので、インデックスの問題がどこから始まるか分かりません。

+0

おかげで、EXPLAINは良いスタートですが、この場合には一つだけのテーブルですので、私は、実行計画と多くを果たしcan't。 – Soborno

+0

私はこれまでずっとEXPLAINを使用していませんでしたが、このケースでは行が1つしかなく、possible_keysとkeysフィールドが現在のインデックス(calldateカラムのもの)と一致するため、実際にはわかりませんどうすればいいですか(「どこで使用するか、filesortを使用する」と書かれているフィールドはありません) – Soborno

+0

「ファイルポートを使用する」とは、テンポラリテーブルのメモリに空きがないことを意味します。ソートのためにバッファスペースを増やしました(テーブルエンジンタイプに依存します)。 – arheops

答えて

0

1)calldateフィールドのインデックスを作成(または既に1

http://dev.mysql.com/doc/refman/5.7/en/show-index.html

2を持っているかどうかを確認するために、「CDRからショーのインデックス」を行う)インデックスを使用するクエリを作成します。

http://dev.mysql.com/doc/refman/5.7/en/index-hints.html

+0

インデックスを作成しましたが、2番目のリンクで指摘したヒントがトリックでした! – Soborno

関連する問題