0
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 re.value like '" + hiragana
            + "%' OR g.value like '" + lookingFor
            + "%' OR g.value like '%" + strSpace + lookingFor
            + "%' GROUP BY s.id LIMIT 5 ";

このクエリは、SQLite データベースからデータを取得し、取得したデータを listview に入れます。LIMIT 5 を入れても非常に遅いです。検索を高速にするにはどうすればよいですか?

4

3 に答える 3

1

SQLLite の専門家ではありませんが、これらは他のデータベースでの経験から見たものです。ただし、実験する必要があるかもしれません。

まず、インデックスを確認します。次に、最初の文字としてワイルドカードが本当に必要ですか? その特定のフィールドでインデックスを使用できないため、通常、ほとんどのデータベース実装でクエリが遅くなります。また、多くのデータベースでは、UNION または UNION ALL クエリは、WHERE 句で OR を使用するよりもはるかに高速であることも指摘できます。

于 2013-08-14T18:00:10.953 に答える