gpt4 book ai didi

android - 即使有索引也非常慢

转载 作者:行者123 更新时间:2023-11-29 21:56:16 25 4
gpt4 key购买 nike

我创建了 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)它很慢!

最佳答案

可能是速度慢的原因

LIKE ('%' || nom...

开头有通配符将使数据库解析该列的全部内容。

此外,如果您准备语句然后绑定(bind)参数,它会有所改善(尽管它不会很重要)。

[编辑]

如果这不是问题,您必须考虑您正在评估 LIKE 子句 3400 次(而您只有 150 个类别)。

尝试用类似的东西预过滤类别表:

SELECT  id_channel , nom_categorie , debut , fin , nom_prgrm 
FROM
programs,
categories_programs,
(select id_categorie,nom_categorie from categories where ('"+sentence+"' LIKE ('%' || nom_categorie || '%'))))
categories
WHERE (categories_programs.id_program = programs.id_program) AND (categories_programs.id_categorie = categories.id_categorie)

(我还没有测试查询,所以它可能有一些错字)

[/EDIT]

关于android - 即使有索引也非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13157094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com