iOS SQLite搜索。速度问题

时间:2011-10-18 08:33:55

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

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

问题是,随着下载图书数量的增加,它变得非常缓慢。基本上,“pages”db表中有一个字段,其中包含书籍的文本内容。它被设置为索引。

以下是我正在使用的查询:

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会以任何方式提高查询的速度吗?另外,我只是在这里搜索一本书,但是如果表中还有其他书籍的页面,它会影响速度吗?

或者,是否只是搜索这么多内容的时间很耗时?

提前感谢您提出任何想法。

- 康纳

1 个答案:

答案 0 :(得分:1)

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

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