我有一个这样的查询:
SELECT * FROM staffs
WHERE MATCH staff_name AGAINST ('johnny')
ORDER BY staff_city ASC
举个例子,我想问一下我应该在这里使用哪个索引。对于MATCH()
和AGAINST()
,列staff_name
上有FULLTEXT
索引,这没关系。但在查询中,staff_city
列上也有ORDER BY
。FULLTEXT
工作速度很快,但在对匹配结果进行排序时,搜索速度较慢。INDEX
需要什么?
MySQL永远不能(几乎永远不会(在一个SELECT
中使用两个索引。Optimizer从您拥有的索引中进行选择,通常会为查询选择最佳索引。
对于这个查询,将只使用您拥有的FULLTEXT
索引,而不考虑表中的其他索引。
其他索引可能对某些其他查询有用。
更多:假设您只关心包含单词"johnny"的行,请更改:
AGAINST ('johnny')
-->
AGAINST ('+johnny' IN BOOLEAN MODE)