0

私はEAVモデルの非常に長いテーブルを持っています。 私のカラムはtipically ID、Timestamp、Valueです。 実際に私のクエリのパフォーマンスを向上させるIDとタイムスタンプのインデックスを作成しますが、それはまだ遅いと思われる.. 私は分割された整数フィールドでタイムスタンプを分割し、それらのフィールドのインデックスを作成するとどうなりますか?このようなもの: 年(Int)、月(Int)、日(Int)、時間(TimeStamp)、ID、値。 パフォーマンスが向上しますか? 今日私は2種類のデータベース、MySqlとPostgreSQLを使用していますが、私は両方に同じ疑念があります。大規模なEAVテーブルでタイムスタンプまたは分割時間列を使用する必要がありますか?

+0

あなたはIDのインデックスとタイムスタンプのINEXを作成したのか、あなたが(ID、タイムスタンプ)にインデックスを作成しました:

は、日付範囲のこのパターンを使用していますか? – miracle173

答えて

1

間違った方向です。新しいインデックスはパフォーマンスを向上させません。また、クエリの中にはいくつか問題を引き起こすものがあります。たとえば考える条件について

where tstamp between '2015-11-22' and '2016-02-03' 

とし、新しいインデックスを使用できるようにしてください。

+0

あなたは正しいです...クエリは煩雑になりますが、パフォーマンスを向上させるためにどのようなソリューションを取ることができますか?月にテーブルを作成する?また、その解決策はクエリを複雑にするでしょう...私はパーティショニングについて聞いていますが、私はそれが何をしているのか正確にはわかりません、その方向を指すべきでしょうか? –

+1

はい、私はこの場合、最もパースペクティブな方法だと思います。実際に私は別の意味のある選択肢を見ません。 – klin

1

(少なくともMySQLで...)

は、日時を分割しないでください。

Do パーティションを使用してください。

Do は、複数のテーブルを使用します(月/ユーザー/など1つ)。

EAVの代替案について考えてみましょう。そのモデルは本質的に悪いです。 (私はタグを追加しました;他のディスカッションを参照してください)

適切な '複合'インデックスを使用してください。

SHOW CREATE TABLESELECTsを入力すると、より具体的にお手伝いできるようになります。

WHERE dt >= '2017-02-26' 
    AND dt < '2017-02-26' + INTERVAL 7 DAY 
+0

はい、私はそのようなものを使用してテーブルを照会するとき..私は元の投稿に入れたタグをチェックします。 –

関連する問題