所以这里是场景:
- MySQL
- 有 1 个 MISAM 表
- 名为 v.value 的列具有全文索引
基本查询工作正常,按预期使用索引:
SELECT p.online_identifier
FROM (...)
WHERE r.area_id = 3 AND s.state_id= 4
AND (snap.area_has_catalogues_attributes_id = 7028
AND MATCH (v.value) AGAINST('+SomeBrand' IN BOOLEAN MODE))
现在,当我添加 OR 时,不使用全文搜索索引(在 v.value 上)。我运行解释来验证它。
查询看起来像这样:
(...)
WHERE r.area_id = 3 AND s.state_id= 4 AND
(snap.area_has_catalogues_attributes_id = 7028 AND MATCH (v.value) AGAINST('+SomeBrand' IN BOOLEAN MODE))
OR (snap.area_has_catalogues_attributes_id = 7045 AND MATCH (v.value) AGAINST('+OtherBrand' IN BOOLEAN MODE))
我不明白为什么。有任何想法吗?