我们最近将Mysql Dev服务器从5.6.27升级到5.7.15。 升级后,我们面临着全文索引的一些问题。
在我们的案例中查询是:
SELECT * FROM
(SELECT * FROM TABLENAME WHERE COLUMN2=KEYWORD2)FOO
WHERE MATCH(COLUMN1) AGAINST(KEYWORD IN BOOLEAN MODE)
P.N我们使用子查询过滤行,因为表有超过4500万行。
升级前查询用于在几秒钟内运行(最多1-2秒)。但升级后查询需要几分钟。
在检查计划后,我们发现查询正在被优化为以下格式,因为在5.7.15中有一些使用派生表的optmization。
SELECT * FROM TABLENAME
WHERE COLUMN2=KEYWORD2 AND MATCH(COLUMN1) AGAINST(KEYWORD IN BOOLEAN MODE).
因此我们通过使用derived_merge = off更改optimizer_switch变量来禁用派生表marge。
但是它开始给出错误 - 找不到与列列表匹配的FULLTEXT索引
在进一步调查中,我们发现在mysql 5.7.6之后,内部临时表引擎从myisam更改为innodb。 所以我们将internal_tmp_disk_storage_engine更改为myisam(全文索引以布尔模式运行而不创建索引)
然后它开始给出错误 - 无法在物化子查询上创建全文索引。
我们尝试从optmizer switch变量中禁用实现。但id没有帮助。 需要帮助来解决这个问题。