给定一个包含一个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),它将用于搜索文档集的索引。在给定的时间段内不会运行很多查询,因此并发使用并不是真正的问题。
答案 0 :(得分:0)
我不知道将查询优化为%q%u%e%r%y%
这样的常规方法。但这几乎肯定不是一个有用的查询,因为如果索引列甚至有点大,它最终会产生大量不相关的匹配。 (例如,您的问题文本将与the alien invasion
匹配,因为它恰好包含了该顺序中的那些字母。)
SQLite FTS扩展程序可能会引起人们的兴趣 - 它允许您索引列中出现的单词。对于你所描述的任务,它应该是完美的。