搜索查询的最佳方式是啥?

Posted

技术标签:

【中文标题】搜索查询的最佳方式是啥?【英文标题】:What is the best way for search query?搜索查询的最佳方式是什么? 【发布时间】:2013-08-16 12:06:35 【问题描述】:

我有很大的 SQLite 数据库(45MB)。我使用 INNER JOIN 从不同的表中获取数据。但是,它的工作速度非常慢。也许这取决于我正在测试的手机(三星 Galaxy Ace)。应该怎么做才能使查询非常快? a) 为表创建索引 b)创建新表,其中包括我需要的表 c)您推荐的其他方式

我正在使用表格:entry、r_ele、k_ele、sense、gloss with 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 ";

【问题讨论】:

请发布表结构和查询以便我们提供帮助。 添加表结构... 您有任何索引或主键/唯一约束吗? 你有光泽度(值)的索引吗?或者,更好的是,gloss(value, lang, fk, id) 【参考方案1】:

如果您有一个大型数据库并在运行中执行如此多的连接,那么性能肯定会很慢。我有一个类似的问题。我解决它的方法是通过在应用初始化时加入相应的表来创建具有所需列的临时表。

如果您的数据是动态的,您还需要在需要时更新临时表中的数据。但如果更改数据的大小不是那么大,更新不会真正造成任何性能问题。

创建临时表的好处是较长的操作只有一次,而且在启动时。

【讨论】:

以上是关于搜索查询的最佳方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章

(在表格中搜索)最佳做法是啥? [关闭]

使用子查询保存查询结果的最佳方法是啥?

通过 Spark SQL 读取 Hive Table 的最佳方法是啥?

使用以下查询获得结果的最佳方法是啥

postgres 上的这个延迟作业查询的最佳索引是啥?

对于大型数据库,从 Impala 采样的最佳查询是啥?