2017-02-07 4 views
0

私のクエリを実行するには、あまりにも多くの時間を取ることは簡単ですが、大量のデータが含まれていますMySQLは

SELECT * 
FROM trackhistory 
WHERE key=14846 and 
    date between "2016-11-15 00:00:00" and "2016-12-16 13:47:02" 

私は、この表に1000万の以上の行を持っています。

私のテーブルの構造は次のとおりです。

enter image description here

はそれを最適化するために私を助けてください。実行に2分以上かかります。

私はクエリの説明を使用しましたが、何の手掛かりも得ていませんでした。 enter image description here

+5

インデックスが定義されていますか。そうでない場合は、キーと日付を1つ追加してください –

+0

可能なキーがnullの場合は、手がかりを与える必要があります... – Shadow

答えて

1

INDEX(key, date)は別のインデックスよりも優れています。

my index cookbook

0

まず、Keyにインデックスを追加し、何が起こるかを確認します。

ALTER TABLE `trackhistory` ADD INDEX (`product_id`) 

次にあなたがDateにキーを追加することができ、それが挿入すると、いくつかの余分な労力を追加し、いくつかのディスク領域がかかります。構文は次のようなsomehtingです。これはあなたのユースケースに依存し、これが賢明なものかどうかは言えません。

あなたの用途を試してみてください。

(と私の正気のために、あなたは、データベースにキャメルケースを持っている場合は、なぜあなたのクエリでそれらを表示しないもある。これはちょうどDateフィールドを有し、かつクエリでdateを持つ、不快に見えます。私はそれを知っていますしかし、....)