mysql - 在未找到给定查询 "champion"的情况下,返回表中存在的 "championship"的最佳方法

标签 mysql select indexing

我有一个很大的 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/

相关文章:

postgresql - 表分区与具有许多索引的非分区表

python - 获取类型错误 : 'list' object is not callable when setting index in Pandas Dataframe

sql - 从 sql 导出文件更新表中的多行

需要修改 Javascript/Jquery 才能正常工作吗?

ios - 如何在不丢失 Mobile Safari 上的右箭头的情况下更改选择框背景

postgresql - 在 postgres psql select 语句中默认截断显示

performance - 该日期列上的非唯一索引会减慢插入具有相同日期值的 50 万个条目的速度吗?

python - SQLAlchemy 查询结果超时

mysql - 如何在 Azure Web 应用安装存储中指定带点的安装路径

mysql - 相当于 MySql 的 db2 REPLACE INTO