0

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

Field1 LIKE %text% OR Field2 LIKE %text%

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

从现在开始我尝试:

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

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

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

  • REGEXP -> 并不比 LIKE 快

我使用 MyISAM“影子表”作为全文索引...

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

所以我的问题是:有什么我忘记了吗?我正在考虑一个让两个通配符工作的技巧。就像 Oracle 中的上下文索引。或者我不知道……这就是我问的原因;)

4

1 回答 1

0

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

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

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

于 2013-03-05T00:18:38.200 回答