【问题标题】:Better performance for SQLite Select StatementSQLite Select 语句的更好性能
【发布时间】:2010-01-01 23:15:41
【问题描述】:

我正在开发一个 Iphone 应用程序,用户在搜索栏中输入任何字符串并按下搜索按钮。之后应该会出现一个结果列表。

在我的 SQLite 中,我有四列 a、b、c、d。假设它们具有以下值:

Dataset 1:
a: code1
b: report1
c: description1_1
d: description1_2

Dataset 2:
a: code2
b: report2
c: description2_1
d: description2_2

所以如果用户输入一个值:“1_1”,那么第一个数据集将被选中,因为 clumn c。 如果用户输入值:“report”,则将选择第一个和第二个数据集。

由于我正在使用包含近 60.000 个数据集的数据库来搜索部分字符串,这确实会影响性能。

为所有 4 列设置索引会使 SQLite 数据库的大小变得太大。 所以我根本没有使用索引。

我的 Select 语句如下所示:

NSString *sql = [NSString stringWithFormat:@"SELECT * FROM scode WHERE a LIKE '%@%@%@' OR c LIKE '%@%@%@' OR d LIKE '%@%@%@'", wildcard, searchBar.text, wildcard, wildcard, searchBar.text, wildcard, wildcard, searchBar.text, wildcard, wildcard, searchBar.text, wildcard];

有没有什么好的方法可以提高在所有列中搜索部分字符串的性能?

谢谢你和亲切的问候,

丹尼尔

【问题讨论】:

    标签: iphone sql performance sqlite


    【解决方案1】:

    您正在使用 SQLite 本身不支持的全文搜索。我对第 3 方支持没有任何经验,但based on results 有几个选项。

    【讨论】:

    • 全文搜索绝对是他所追求的,这让我感到困惑。 Sqlite 有 FTS3 可用但现在没有启用,不是吗?
    【解决方案2】:

    您回答了自己的问题:对所有四列进行索引。并测量尺寸差异。考虑到 iPhone 的存储容量,您可能在尝试减少存储时失去平衡。

    SQLite 性能的经验法则是不要执行没有索引的查询。

    您可以通过在 Mac 上使用相同的架构和 EXPLAIN QUERY PLAN 创建数据库来了解 SQLite 实际在做什么。 (还有 EXPLAIN,更详细但不太明显。)

    【讨论】:

      【解决方案3】:

      您可以创建一个单独的表,其中包含两列:一个模式字符串和一个键值(用于引用您的数据表)。让我们将此表称为“search_index”。

      然后,在对数据表条目进行任何更改时,更新“search_index”表:

      1. 删除带有已更改数据表行的键的行
      2. 对于数据表中的每一列,使用数据的前X个字符,并用key将它们添加到search_index

      您可以自己制定细节,但这样一来,您只需构建自己的(部分)搜索索引。

      查询时,最多可以使用 X 个字符单独在 search_index 表中进行搜索。如果用户输入的字符超过 X 个,那么您至少有一组有限的数据表行可供搜索。因此您可以轻松搜索这 60k 行。

      为 X 找到一个合适的价值,以平衡存储需求以及可用性和性能。

      编辑:看起来您不想只搜索单词的开头?好吧,那么您不应该只使用“前 X 个字符”,而是应该将数据拆分为单个单词,并在 search_index.html 中使用完整的单词。尽管实际上与为所有列提供索引相比,您仍然需要大约四分之一的索引存储需求。因此,建立自己的“search_index”仍然是一件好事。

      【讨论】:

        猜你喜欢
        • 2011-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-20
        相关资源
        最近更新 更多