小编典典

在MySql中,查找具有给定前缀的字符串

sql

在MySql中,我想定位记录的位置,其中一列中的字符串值以查询字符串开头(或与查询字符串相同)。该列以适当的排序规则索引。但是,该列上没有全文本搜索索引。

一个好的解决方案将是:

  1. 使用列上的 索引 。需要遍历表中所有记录的解决方案还不够好(表中有几百万条记录)

  2. 使用具有 任何字符值的 字符串。一些列值包含标点符号。查询字符串可能也是如此。如果您的解决方案包含正则表达式字符或类似字符,请记住这一点。字符串是UTF-8编码的,但是如果您的解决方案仅适用于ASCII,那么它仍然很有用。

我现在最接近的是

SELECT * FROM TableName WHERE ColumnName BETWEEN query AND <<query+1>>

<<query+1>>被预先计算以字典顺序遵循query的排序顺序。例如,如果query为“ o hai”,<<query+1>>则为“
o haj”。


阅读 238

收藏
2021-05-05

共1个答案

小编典典

出乎意料的是,LIKE如果您要进行前缀搜索,那么查询将使用索引就很好。

SELECT * from TableName Where ColumnName LIKE 'o hai%'

确实会使用索引,因为它不是以通配符开头。

这种(以及其他行为)在“
MySQL如何使用索引”文档中有记录:http : //dev.mysql.com/doc/refman/5.0/en/mysql-
indexes.html

您将需要转义’%’字符并遵循正常的引用规则,但除此之外,任何utf-8输入前缀都应该起作用并完成工作。运行EXPLAIN查询以确保,有时其他原因可能会导致索引无法正常工作,例如需要OPTIMIZE TABLE进行更新索引基数的操作(尽管这可能会花费很多时间并锁定您的表)

2021-05-05