0

私は大きな SQLite データベース (45MB) を持っています。INNER JOIN を使用して、さまざまなテーブルからデータを取得します。ただし、動作が非常に遅いです。たぶん、私がテストしている携帯電話(Samsung Galaxy Ace)次第です。クエリを非常に高速にするにはどうすればよいですか? a) テーブルのインデックスを作成する b) 必要なテーブルを含む新しいテーブルを作成する c) あなたが推奨する他の方法

ここに画像の説明を入力

私はテーブルを取っています:entry、r_ele、k_ele、sense、glossをJOINで。

query = "SELECT" + " e.id AS _id," + " ke.id AS ke_id,"
                + " ke.fk as ke_fk," + " ke.value as ke_value,"
                + " re.id AS ke_id," + " re.fk as re_fk,"
                + " re.value as re_value," + " s.id AS  s_id,"
                + " s.fk as s_fk," + " g.id AS g_id," + " g.fk as g_fk,"
                + " g.lang," + " g.value as g_value" + " FROM entry e"
                + "     INNER JOIN k_ele ke ON e.id = ke.fk"
                + "     INNER JOIN r_ele re ON e.id = re.fk"
                + "     INNER JOIN sense s ON e.id = s.fk"
                + "     INNER JOIN gloss g ON s.id = g.fk"
                + " WHERE g.lang IS NULL AND g.value like '"
                + lookingFor + "%'  GROUP BY g.value LIMIT 5 ";
4

1 に答える 1

0

大きなデータベースがあり、その場で非常に多くの結合を行う場合、パフォーマンスは遅くなります。同様の問題がありました。私がそれを解決した方法は、アプリの初期化時にそれぞれのテーブルを結合して、必要な列を持つ一時テーブルを作成することです。

データが動的な場合は、必要に応じて一時テーブルのデータも更新する必要があります。ただし、変更されたデータのサイズがそれほど大きくない場合、更新によって実際にパフォーマンスの問題が発生することはありません。

一時テーブルを作成する利点は、より長い操作が一度だけ存在し、起動時に行われることです。

于 2013-08-16T15:29:06.870 に答える