0

私は非常に単純なクエリを持っています:

SELECT count(id), min(id), max(id), sum(size), sum(frames), sum(catalog_size + file_size)
FROM table1

table1約3000から4000のレコードを保持します。

私の問題は、このクエリの実行に約20秒かかることです。また、複数回呼び出されるため、遅延は顧客にとって非常に明白です。

このクエリに20秒かかるのは正常ですか?実行時間を改善する方法はありますか?SQLite Managerからこれと同じクエリを実行すると、実行に数ミリ秒かかります。遅延は、クエリがソフトウェアから呼び出された場合にのみ発生します。あまり役に立たなかったEXPLAINEXPLAIN QUERY PLANSQLite3.7.3バージョンとWindowsXPeを使用しています。

この問題をトラブルシューティングする方法、またはクエリのパフォーマンスを向上させる方法について何か考えはありますか?

4

1 に答える 1

1

すべてのsumsでは、テーブル内のすべてのレコードを読み取る必要があります。

テーブルに上記の列よりも多くの列が含まれている場合、ディスクから読み取られたデータには、有用な値と役に立たない値の両方が含まれます(特に大きなblobがある場合)。その場合、このクエリに必要な列を正確にカバーするインデックスを作成することで、このクエリで読み取る必要のあるデータを減らすことができます。
3.7.15より前のバージョンのSQLiteでは、ORDER BYSQLiteにそのインデックスを使用させるために、最初のインデックスフィールドにを追加する必要がありますが、これはすべてのクエリで機能するわけではありません。(クエリについては、このベータ版に更新するか、3.7.15を待ちます。)

于 2012-10-19T15:31:13.893 に答える