我有一个包含 3 个字段和 500 万行的小表:
字段为 Id、DEPTAIRPORT、ARRAIRPORT、DEPT/ARR 字段为 FULLTEXT 索引
运行此代码时,需要 >1 分钟才能获得结果:
SELECT * FROM test_copy
WHERE
DEPTAIRPORT LIKE 'buenos%' AND
ARRAIRPORT LIKE 'tokyo%';
但是,当我使用此查询时,需要 1 秒:
SELECT * FROM test_copy
WHERE
DEPTAIRPORT LIKE 'buenos%' AND
MATCH (ARRAIRPORT) AGAINST ('tokyo*' IN BOOLEAN MODE)
使用两个 MATCH/AGAINST(而不是 LIKE)也需要 >1 分钟。
问题:为什么使用 LIKE 和 MATCH/AGAINST 时两个 LIKE 需要这么长时间?
我主要担心的是最终表将有 10 个字段(和超过 3000 万条记录),然后搜索条件将更加复杂,包括其他字段上的 LIKE ......但如果只有两个 LIKE 导致这样的延迟,我会想在继续之前解决问题...
编辑:字段是全文。EXPLAIN 显示第一个查询(LIKE + LIKE):
选择类型:简单 类型:全部 可能的键:DEPTAIRPORT,ARRARIPORT 键:空 ley_len:NULL 参考:空 行数:4444841 额外:在哪里使用
EXPLAIN 显示第二个查询(LIKE + MATCH/AGAINST):
选择类型:简单 类型:全文 可能的键:DEPTAIRPORT,ARRARIPORT 键:ARRAIRIPORT key_len:0 参考:空 行数:1 额外:在哪里使用
第二次编辑:我重新启动了 HeidiSQL,现在 LIKE+LIKE 查询需要 10 秒(>1 分钟之前)。看起来很奇怪......