1

大量のデータ、数百万行を含む SQLite テーブルがあります。約 1 秒ごとに行が挿入されます。

行には、エポック以降のミリ秒に変換され、1343224574667 などの数値として保存される作成日用の列があります。各行にはコンテナーの ID 用の列もあり、これは単なる文字列フィールドです。

特定のコンテナー ID の特定の時間範囲内に作成されたアイテムを取得するクエリを実行しようとしています。したがって、クエリは次のようになります

Select * from Item where Created > [number] and Created < [number] and ContainerId=[string]

かなり基本的なクエリ。

テーブルにいくつかのインデックスがあります。[Created] に 1 つ、[Created, ContainerId] に 1 つあります。このクエリを短い時間範囲で実行すると、クエリは数百ミリ秒のように非常に高速です。ただし、時間範囲が 1 週間程度に及ぶように拡張すると、このクエリは非常に遅くなり、平均で 75 秒を超えます。これをスピードアップする方法はありますか?これは、結果を待たなければならない非常に長い時間のようです。しかし、私は DBA ではないので、何か間違ったことをしているのかもしれません。

ありがとう!

4

1 に答える 1

0

クラスター化インデックスを使用すると、範囲に対するクエリを高速化できます。SQLite の場合、おそらく主キーを使用することを意味します。可能であれば、(Created, ContainerId) をテーブルの PRIMARY KEY にしてみてください。

于 2012-08-23T14:22:49.327 に答える