我必须在我的完整InnoDB MySql数据库的2个字段上进行文本搜索。 在过去,我用过:
Field1 LIKE %text% OR Field2 LIKE %text%
但现在我的数据增加了很多,“喜欢”搜索变得太慢了。 所以我开始寻找另一种更好的解决方案。
从现在开始我尝试了:
全文索引(MATCH(...)AGAINST) - >不支持前导通配符
CONTAINS - >在MySql中没有可用(只有Transact-Sql)
反向全文索引 - >使用前导通配符,但如果匹配位于中间则不行
REGEXP - >并不比LIKE快
我使用MyISAM“影子表”作为全文索引......
我不想使用像Sphinx,Lucene或s.e
这样的外部搜索引擎所以我的问题: 我忘记了什么吗? 我正在考虑让两个野外卡工作的技巧。就像Oracle中的CONTEXT索引一样。 或者我不知道......这就是我问的原因;)
答案 0 :(得分:0)
模式中的前导百分号'%'导致执行表扫描,因此随着数据量的增加,性能会下降。
请注意,这也反映出由于场的非原子性,你的数据并不是“关系型”的;你的数据库不再是关系数据库,而不是你仍在使用RDBMS作为数据存储引擎。
真正的解决方案是通过将Field1和Field2转换回一组关系(即原子)字段来重构数据表。我知道,这可能超出了手头项目的任何合理范围;但这是解决方案。