只是说我有一个查询如下..
SELECT
name,category,address,city,state
FROM
table
WHERE
MATCH(name,subcategory,category,tag1) AGAINST('education')
AND
city='Oakland'
AND
state='CA'
LIMIT
0, 10;
..我的fulltext
索引为name,subcategory,category,tag1
,composite
索引为city,state
;这个查询足够好吗?只是想知道在使用带有MATCH / AGAINST的全文索引时混合其他AND
时是否需要额外的东西。
编辑:我想要了解的是,查询中的其他列会发生什么,但未在所选索引(全文索引)中编入索引,上面的示例为{ {1}}和city
。 MySQL现在如何找到匹配的行,因为它不能使用两个索引(或者它可以吗?) - 所以,基本上,我试图理解MySQL如何最佳地找到数据 对于不在所选全文索引中的列,如果有任何我可以 做的事情来优化查询。
答案 0 :(得分:1)
我认为您可以在查询中使用EXPLAIN
轻松确定使用哪个索引。请检查this question的已接受答案,该答案提供了一些有关如何解释EXPLAIN
输出的良好资源。
MySQL如何找到匹配的行,因为它无法使用 两个指标
是的,它可以:Can MySQL use multiple indexes for a single query?另外,您应该阅读文档:How MySQL Uses Indexes
答案 1 :(得分:1)
前段时间我有类似的任务,我注意到MySQL可以在一个查询中使用FULLTEXT索引或任何其他索引/索引,但不能同时使用两者;我无法将FULLTEXT与任何其他索引混合使用。使用全文搜索的任何选择都将以这种方式工作:
所以你可以使用全文索引或任何其他索引(我无法通过FORCE INDEX或其他任何东西使用这两个索引)。
我建议尝试使用全文并使用其他索引(即在城市和州列上)并比较结果 - 它们可能会因数据库中的实际内容而异。
在我的情况下,我发现在这种查询中强制常规(非全文)索引产生了更好的性能(因为我有非常多的行,大约300 000,非全文标准匹配大约1000个)。
我使用的是MySQL 5.5.24