[英]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.