【问题标题】:Find words in table based off prefix根据前缀在表中查找单词
【发布时间】:2013-07-14 00:22:30
【问题描述】:

我很好奇根据前缀存储和检索大量单词的最佳方法是什么。该表将包含约 200,000 个单词。我需要根据给定的前缀(长度为 2 个字符)查找/返回所有匹配的单词

例如。表包含 = "abc" "abcd" aef"

给定前缀“ab”返回“abc”、“abcd”

我目前拥有的是:

select *
from table
where word like 'ab%'

但我不觉得这是最好的实现

【问题讨论】:

  • 只要您为该列建立了索引,并且在 % 之前有一些东西,这应该可以正常工作。如果你搜索 %cd 或 %b% 之类的东西,你会遇到问题,但 xx% 会很好地使用索引。

标签: database sqlite indexing


【解决方案1】:

如果 SQLite 可以使用索引进行此查找,则此查询非常有效。

LIKE 不区分大小写,所以

  • 列必须有TEXTaffinity,即它应该声明为word TEXT或类似的东西;和
  • 索引必须是created as case insensitive,例如:

    CREATE INDEX MyTable_word_index ON MyTable(word COLLATE NOCASE);
    

如果你想要一个区分大小写的比较,你可以使用任何正常的索引和一些正常的比较运算符:

SELECT *
FROM MyTable
WHERE word >= 'ab'
  AND word <  'ac'

【讨论】:

    【解决方案2】:

    SELECT * FROM tableName WHERE word LIKE 'ab%'

    【讨论】:

    • 没有比这更高效的了吗?
    • 提高效率需要消耗空间或内存。 1.您可以根据前缀创建更多字段。您可以直接将字段与前缀进行比较。 2.在应用程序中将表加载到内存中。然后从内存中搜索单词。如果代码是C#,也许你可以使用linq。
    • 如果我要创建两列,一列用于 2 个字符的前缀,另一列用于单词的其余部分,这样会更有效吗?
    • 您可以创建类似哈希表的表并尝试一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 2017-01-18
    • 2022-06-10
    • 2017-01-27
    • 1970-01-01
    相关资源
    最近更新 更多