如何快速优化搜索查询工作?

Posted

技术标签:

【中文标题】如何快速优化搜索查询工作?【英文标题】:How to optimize search query work fast? 【发布时间】:2013-08-14 17:19:42 【问题描述】:
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 数据库中获取数据,并将获取的数据放入列表视图中。即使我设置了 LIMIT 5,它的工作速度也很慢。应该怎么做才能使搜索工作快速?

【问题讨论】:

您可以查看全文搜索。我相信 android 构建支持 SQLite 的 FTS 扩展。 sqlite.org/fts3.html 所以我现在不能用了? :( 【参考方案1】:

不是 SQLLite 专家,但这些是我从其他数据库的经验中看到的类型。不过你可能需要体验一下。

首先检查您的索引。接下来你真的需要一个通配符作为第一个字符吗?在大多数数据库实现中,这通常会使查询变慢,因为它不允许您在该特定字段上使用索引。我还可以指出,在许多数据库中,UNION 或 UNION ALL 查询比在 WHERE 子句中使用 OR 快得多。

【讨论】:

什么是索引?我听说了。但我不明白那是什么。它如何帮助加快搜索速度? 您需要阅读有关索引的内容,如果不深入了解什么是复杂主题,您将无法使用任何数据库。【参考方案2】:

减少 where 子句的连接和/或条件的数量。您可以将所有数据放入内存并使用 java 将所需的结果集减少到您想要的。

【讨论】:

这是我可以做的最小连接数。“您可以将所有数据放入内存”。这是什么意思?【参考方案3】:

我认为诸如复杂的处理必须在服务器端完成。

【讨论】:

复杂?几乎没有。 服务器端?如果它把这个搜索拉紧了,怎么办?

以上是关于如何快速优化搜索查询工作?的主要内容,如果未能解决你的问题,请参考以下文章

360搜索引擎优化排名教程(如何快速提升长尾关键词)!

使用 GROUP BY ... HAVING 优化 MySQL 查询时遇到问题

如何优化Mysql千万级快速分页

大型sql server查询性能优化

MySQL查询优化器工作原理解析

MySQL查询优化器工作原理解析