我有一个INNODB表,需要在VARCHAR列中搜索,但搜索非常慢。我无法添加FULLTEXT索引:(并且MYISAM不是一个选项。
有些人给我建议使用HEX,如下面的代码。 是对的吗?它表现更好吗?我认为我的申请没有任何进展。
SELECT * FROM order_line WHERE HEX(description) LIKE '%6B616C6B7A616E64737465656E%'
答案 0 :(得分:0)
即使有问题的表需要InnoDB,并且由于某种原因你被限制为过时的MySQL版本,至少有两个可能的改进(第三个是基于其中一个):
将主键和可搜索的文本列复制到带有全文索引的MyISAM表中,然后对其进行搜索。显然,每次更新原稿时都需要更新搜索表。
您可以创建缓存表,存储有关已执行搜索及其命中的信息,以便以后重复使用(一个用于跟踪缓存的搜索,另一个用于缓存实际结果)。同样,这将要求您定期更新缓存或完全清除缓存。
由于您正在使用LIKE进行搜索,因此可以使用解决方案#2和其他黑客攻击:首先检查是否存在对当前搜索查询的子字符串进行缓存搜索,并将搜索范围限制为仅与之前搜索匹配的项目。