使用十六进制函数的mysql搜索优化

时间:2014-02-03 10:15:33

标签: mysql

我有一个INNODB表,需要在VARCHAR列中搜索,但搜索非常慢。我无法添加FULLTEXT索引:(并且MYISAM不是一个选项。

有些人给我建议使用HEX,如下面的代码。 是对的吗?它表现更好吗?我认为我的申请没有任何进展。

SELECT *
FROM order_line
WHERE HEX(description) LIKE '%6B616C6B7A616E64737465656E%'

1 个答案:

答案 0 :(得分:0)

即使有问题的表需要InnoDB,并且由于某种原因你被限制为过时的MySQL版本,至少有两个可能的改进(第三个是基于其中一个):

  1. 将主键和可搜索的文本列复制到带有全文索引的MyISAM表中,然后对其进行搜索。显然,每次更新原稿时都需要更新搜索表。

  2. 您可以创建缓存表,存储有关已执行搜索及其命中的信息,以便以后重复使用(一个用于跟踪缓存的搜索,另一个用于缓存实际结果)。同样,这将要求您定期更新缓存或完全清除缓存。

  3. 由于您正在使用LIKE进行搜索,因此可以使用解决方案#2和其他黑客攻击:首先检查是否存在对当前搜索查询的子字符串进行缓存搜索,并将搜索范围限制为仅与之前搜索匹配的项目。