SQL(ite)LIKE优化(或任何其他数据库真的)

时间:2012-10-12 00:05:28

标签: mysql sql database sqlite relational-database

给定一个包含一个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应用程序(a documentation browser),它将用于搜索文档集的索引。在给定的时间段内不会运行很多查询,因此并发使用并不是真正的问题。

1 个答案:

答案 0 :(得分:0)

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

SQLite FTS扩展程序可能会引起人们的兴趣 - 它允许您索引列中出现的单词。对于你所描述的任务,它应该是完美的。