我有一个很大的 table ,上面有字符串。 字段“单词”:
- dog
- champion
- cat
- this is a cat
- pool
- champ
- boots
...
在我的示例中,如果选择查询正在查找给定的字符串“championship”,它将找不到它,因为该字符串不在表中。 在这种情况下,我希望查询从表中返回“champion”,即表中以给定单词“championship”开头的最长字符串。 可能的匹配(如果找到)是表中冠军、或championshi、或championsh、或champion、...、或cham、或cha、或ch、或C之间最长的匹配。
问题:我想返回表中以给定字符串开头的最长字符串。
我需要高速。有没有办法创建索引和查询以便快速执行查询?
最佳答案
这是一个将返回指定结果的查询:
SELECT t.mycol
FROM mytable t
WHERE 'championship' LIKE CONCAT(t.mycol,'%')
ORDER
BY LENGTH(t.mycol) DESC
LIMIT 1
此查询无法执行索引范围扫描,它必须进行完整扫描,但它可能能够使用索引来满足查询。
如果您可以将搜索限制为需要匹配才能被视为“命中”的有限数量的前导字母,则可以包含另一个谓词。例如,要匹配至少 4 个字符:
SELECT t.mycol
FROM mytable t
WHERE 'championship' LIKE CONCAT(t.mycol,'%')
AND t.mycol LIKE 'cham%'
ORDER
BY LENGTH(t.mycol) DESC
LIMIT 1
--或--
AND t.mycol >= 'cham'
AND t.mycol < 'chan'
关于mysql - 在未找到给定查询 "champion"的情况下,返回表中存在的 "championship"的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18177569/