0

私は Java で SQLite データベース分析ツールに取り組んでいます。私の現在の目的は、データベース内のどのテーブルとビューにレコードが含まれていないかを確認することです。私の問題は速度の問題です。ビューが空かどうかを判断しようとすると、最大の速度低下が発生します。SQLiteSpy で単一のビューに対して個々のクエリをテストしましたが、戻り時間を 1 ~ 2 秒未満にすることはできません。数百のビューにスケールアップすると、そのパフォーマンスは機能を気にしないという点で受け入れられません. 独自のコードを使用すると、約 120 のテーブルをチェックできます。最大のテーブルは約 100,000 行で、平均速度は 3.74 ミリ秒です。

私の現在のクエリ:

 SELECT exists(SELECT 1 FROM table LIMIT 1);

私が言ったように、これは私のテーブルではうまくいきますが、ビューでは遅すぎます。

私も次のことを試しました:

  SELECT count(*) FROM table;  
  SELECT count(1) FROM table;
  SELECT 1 FROM table LIMIT 1;

また、制限が 1 の既知の列を選択しようとしましたが、数秒かかりました。

私の最後の手段は、最初にテーブルをクエリしてからビューをクエリし、プロセス全体で単一のタイムアウトを設定することです。私のテスト データベースには約 250 のテーブルとビューがあり、それぞれはそれほど大きくありません。私の目標は、どれが空であるかを最大 1.5 秒以内に報告できるようにすることです。SQLiteSpy のように、treeView 内のテーブルとビューに緑のプラス記号または赤のマイナス記号が付けられる機能を提供できるようにしたいと考えています。どうやってそれらすべてをそれほど速くマークできるのか、私には理解できません。

4

2 に答える 2

0

これはSQLite固有です。

ANALYZEコマンドを実行してから、 sqlite_statNテーブルにクエリを実行して、行数がゼロのテーブルを確認できます。

于 2013-06-12T15:52:16.327 に答える