繁体   English   中英

带通配符的SQL文本搜索

[英]SQL text search with wildcards

我必须在完整的InnoDB MySql数据库的2个字段上进行文本搜索。 过去我用过:

Field1 LIKE %text% OR Field2 LIKE %text%

但是现在我的数据增加了很多,“赞”搜索变得太慢了。 因此,我开始寻找另一个更好的解决方案。

从现在开始,我尝试:

  • 全文索引(MATCH(...)AGAINST)->不支持前导通配符

  • CONTAINS->在MySql中不可用(仅Transact-Sql)

  • 反向全文索引->使用前导通配符,但如果匹配项位于中间,则不起作用

  • REGEXP->不是真的比LIKE快

我将MyISAM“影子表”用于全文索引。

我不想使用Sphinx,Lucene或se等外部搜索引擎

所以我的问题是:有什么我忘了吗? 我正在考虑使两个通配符都起作用的技巧。 就像Oracle中的上下文索引一样。 还是我不知道...这就是为什么我问;)

模式中的前导百分数'%'导致执行表扫描,因此,随着数据量的增加,性能下降。

请注意,这也反映出由于场的非原子性质,您的数据不再是“关系”的。 尽管您仍在使用RDBMS作为数据存储引擎,但您的数据库不再是关系数据库。

真正的解决方案是通过将Field1和Field2转换回一组关系(即原子域)字段来重组数据表。 我知道,这可能超出了手头项目的任何合理范围。 但这是解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM