2017-07-29 1 views
0

私は株価のテーブルを持っています。テーブルでMySQL - インデックスにもかかわらず複数の条件を持つクエリが遅い

enter image description here

「data_1d」はticker_idとタイムスタンプのためのユニークなインデックスticker_timestampがある:スキーマは次のようになります。 timestamp_idのプライマリインデックス。

'data_1d'には~6.3Mの行があります。

このクエリは4+秒かかる:説明

select * from data_1d where timestamp_id=1387 and open_close>20 

を:

enter image description here

そして、私は、タイムスタンプの範囲を検索する場合には、20〜30秒です。

私は1つの基準、タイムスタンプまたはopen_closeだけで検索すると、0.1-0.6秒かかります。例えば

select * from data_1d where timestamp_id=1387 

OR

select * from data_1d where and open_close>20 

私はここにパフォーマンスを向上させるために何ができますか?

ありがとうございました。

EDIT:テーブルを作成するためにステートメントを使用しませんでしたが、スキーマから理解できるはずです。参照ティッカー - スタンプ

data_1d ticker_id:ID

timestamps_1d 主キー:ID 一意のインデックスが、これらは彼らに

ティッカー 主キーを使用しているキーです.id timestamp_id - 参照timestamps_1d.id 一意のインデックス(または2 cols、ticker_idおよびtimestamp_id):tic

+0

EXPLAINで取得するクエリプランを追加してください –

+1

適切なすべてのテーブルに対して適切なCREATE TABLEステートメント – Strawberry

+0

実際に異なるケースで試した異なるクエリ – THN

答えて

0

はないタイムスタンプなどの連続値を、「正常化」ですかker_timestampsなど

、日付、山車「そして、私は、タイムスタンプの範囲を検索する場合には、20〜30秒のです。」 - 私たちに質問を表示します。その点については、スキーマとインデックスの作成に役立つように、のサンプルをすべて見てみましょう。重要なクエリ。

"unique index:timestamp" - 同じタイムスタンプを持つ2つの異なる株がありますか?

DECIMAL(7,2):NYSE:BRKAに収まらない少なくとも1つのティッカーがあります。 INTは、時折のボリュームでは十分ではありません。

select * from data_1d where and open_close>20に構文エラーがあります。

関連する問題