MySQL多列全文索引搜索:能否用索引名替代列名?
MySQL全文索引MATCH子句能否用索引名替代列名?
结论很明确:不能直接用索引名在MATCH子句里查询,你必须在MATCH()中明确列出全文索引覆盖的所有列名,或者列的集合与某条全文索引的定义完全匹配,MySQL才会使用对应的索引。
为什么疑问中的写法不行?
你写的MATCH(some_keyname)会被MySQL当成列名处理,但你的表中并没有名为some_keyname的列,执行这条SQL会直接报错:Unknown column 'some_keyname' in 'where clause'。
正确的处理方式
- 像你给出的有效示例那样,列出索引覆盖的所有列:
SELECT col2, col3 from sample_table where MATCH(col1, col2, col3, col4) AGAINST ("abcd")
MySQL会自动匹配到你创建的some_keyname全文索引,不需要额外指定索引名。
- 如果你想强制MySQL使用某个全文索引,可以用
FORCE INDEX语法(但依然要在MATCH里列全对应列):
SELECT col2, col3 from sample_table FORCE INDEX (some_keyname) where MATCH(col1, col2, col3, col4) AGAINST ("abcd")
简单来说,MATCH()的参数必须是列名集合,不能是索引名——索引是MySQL用来优化查询的底层对象,语法上不支持直接在MATCH里引用索引名。
内容的提问来源于stack exchange,提问作者rgg
相关产品推荐
相关产品推荐

