次のような3つのテーブルを作成しました:
db.execSQL("CREATE TABLE IF NOT EXISTS programs (id_program INTEGER PRIMARY KEY AUTOINCREMENT , id_channel TEXT , nom_prgrm TEXT , debut TEXT , fin TEXT , FOREIGN KEY(id_channel) REFERENCES channels(id_channel)) ");
db.execSQL("CREATE INDEX __program_index ON programs(nom_prgrm)");
db.execSQL("CREATE TABLE IF NOT EXISTS categories (id_categorie INTEGER PRIMARY KEY AUTOINCREMENT, nom_categorie TEXT)");
db.execSQL("CREATE UNIQUE INDEX __categorie_index ON categories(nom_categorie,id_categorie)");
db.execSQL("CREATE TABLE IF NOT EXISTS categories_programs (id_categorie INTEGER REFERENCES categories(id_categorie) ,id_program INTEGER REFERENCES programs(id_program), PRIMARY KEY(id_categorie,id_program))");
プログラム テーブルにはほぼ 2500 のレコードとカテゴリ 150 が含まれているため、リンク テーブルには 3400 のレコードがあります。
このクエリを実行すると、結果を表示するのに非常に長い時間がかかります。これを最適化する方法がわかりません!!
SELECT id_channel , nom_categorie , debut , fin , nom_prgrm FROM programs, categories_programs, categories WHERE ( (categories_programs.id_program = programs.id_program) AND (categories_programs.id_categorie = categories.id_categorie) AND ('"+sentence+"' LIKE ('%' || nom_categorie || '%')))
おそらく、この問題を引き起こしているのは結合です??
手伝ってくれてありがとう
私の問題は解決しました。Android 4.1で同じコードを試してみたところ、非常に高速に動作しましたが、S2(Android 2.3)では遅かったです。