使用通配符进行SQL文本搜索

时间:2013-03-04 17:12:53

标签: mysql sql

我必须在我的完整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索引一样。 或者我不知道......这就是我问的原因;)

1 个答案:

答案 0 :(得分:0)

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

请注意,这也反映出由于场的非原子性,你的数据并不是“关系型”的;你的数据库不再是关系数据库,而不是你仍在使用RDBMS作为数据存储引擎。

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