0

给定一个包含一个 TEXT(单个单词)列和最多 100 万行的表,优化此查询的最佳方法是什么:

SELECT name
FROM searchIndex
WHERE name LIKE '%q%u%e%r%y%'
ORDER BY (CASE
              WHEN name LIKE 'query' THEN 1
              WHEN name LIKE 'query%' THEN 2
              WHEN name LIKE '%query' THEN 3
              WHEN name LIKE '%query%' THEN 4
              WHEN name LIKE 'q%u%e%r%y%' THEN 5
              ELSE 6
          END);

目前,我正在使用 SQLite。但是,我愿意尝试任何(免费)数据库系统和任何表结构。

我需要它用于 Mac OS X 应用程序(文档浏览器),它将用于搜索文档集的索引。在给定的时间段内不会有很多查询运行,因此并发使用并不是真正的问题。

4

1 回答 1

0

我知道没有实用的方法来优化查询,如%q%u%e%r%y%. 但这几乎肯定不是一个有用的查询,因为如果索引列有点大,它最终会生成大量不相关的匹配。(例如,您的问题文本将与 匹配the alien invasion,因为它恰好按该顺序包含这些字母。)

SQLite FTS扩展在这里可能很有趣——它将允许您索引出现在列中的单词。对于您描述的任务,它应该是完美的。

于 2012-10-12T00:33:19.587 回答