在MySql中,我想定位记录的位置,其中一列中的字符串值以查询字符串开头(或与查询字符串相同)。该列以适当的排序规则索引。但是,该列上没有全文本搜索索引。
一个好的解决方案将是:
使用列上的 索引 。需要遍历表中所有记录的解决方案还不够好(表中有几百万条记录)
使用具有 任何字符值的 字符串。一些列值包含标点符号。查询字符串可能也是如此。如果您的解决方案包含正则表达式字符或类似字符,请记住这一点。字符串是UTF-8编码的,但是如果您的解决方案仅适用于ASCII,那么它仍然很有用。
我现在最接近的是
SELECT * FROM TableName WHERE ColumnName BETWEEN query AND <<query+1>>
凡<<query+1>>被预先计算以字典顺序遵循query的排序顺序。例如,如果query为“ o hai”,<<query+1>>则为“ o haj”。
<<query+1>>
query
出乎意料的是,LIKE如果您要进行前缀搜索,那么查询将使用索引就很好。
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进行更新索引基数的操作(尽管这可能会花费很多时间并锁定您的表)
EXPLAIN
OPTIMIZE TABLE