sql - iOS SQLite 搜索。速度问题

标签 sql objective-c ios sqlite full-text-search

我的应用目前具有搜索书籍的搜索功能。注意:搜索操作一次只能搜索一本书。

问题是随着下载书籍数量的增加,它变得相当慢。基本上,“页面”数据库表中有一个字段包含本书的文本内容。它被设置为索引。

这是我正在使用的查询:

SELECT * FROM (
    SELECT
        page_num, content
    FROM
        offline_pages
        JOIN offline_chapters ON offline_chapters.uid = offline_pages.offline_chapters_uid
        JOIN offline_books ON offline_books.uid = offline_chapters.offline_books_uid
    WHERE
        offline_books_uid = ?
        AND
        content LIKE '%?%'
    ORDER BY
        page_num
) AS temp
ORDER BY temp.page_num
LIMIT 30

随着书籍数量的增加,用户仍在提示搜索功能。我知道这个查询非常繁重,但有什么方法可以改进它吗?

我之前一直在研究 SQLite 的 FTS 模块,以此来获得更好的结果等。FTS 会以任何方式提高查询速度吗?另外,我在这里只搜索一本书,但如果表中也有属于其他书的页面,会影响速度吗?

或者,搜索如此多的内容是否耗时只是个例?

在此先感谢您对此的任何想法。

--康纳

最佳答案

乍一看,尝试删除不必要的子查询和重复的“ORDER BY”语句。 “LIKE”语句也非常耗时(在许多情况下应尽可能避免,除非只处理一个小字符串);看看您是否可以更改该条件,以便它不必检查该文本字段中的每个字符序列。您还可以添加一些其他条件来减少 like 语句必须检查的数据子集。

另一种技术是对内容进行自己的索引。列上的数据库索引实际上只适用于精确匹配,不适用于字符序列搜索。因此,尝试在代码中通过解析添加到数据库中的内容来建立自己的索引,并使用这些常用词、短语或字符序列创建另一个表。

关于sql - iOS SQLite 搜索。速度问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7804447/

相关文章:

objective-c - 单击选项卡时需要在进入单击的选项卡之前回答警报 - iPad 编程

ios - 如何在 iOS 中获得 C 函数崩溃?

ios - 从 HTML 正文创建 PDF 文件并作为邮件附件发送,iOS

ios - SWIFT - ScrollView 内的 WKWebView 中的 HTML 滚动事件

python - 在Django模型中,有没有办法通过非pk列从多个表中选择属性并点击数据库一次?

mysql - mysql数据库逻辑是否适合查询?

ios - -[__NSDictionaryM intValue] : unrecognized selector sent to instance 0x13f26a60

iphone - 如何在代码中更改 UIBarButtonItem 的样式

sql - sql server 2008 中出现登录错误

mysql - 在不使用集合运算符(UNION)的情况下组合选择查询的结果