MySQL的全文索引用于MATCH()AGAINST但不适用于=
问题描述:
我的表xm_c是这样创建的:
选择:MySQL的全文索引用于MATCH()AGAINST但不适用于=
CREATE TABLE `xm_c` ( `category_id` char(16) NOT NULL default '', `label` char(64) NOT NULL default '', `flags` smallint(5) unsigned default NULL, `d0` date default NULL, `d1` date default NULL, `ct` int(6) unsigned default NULL, `t_update` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, PRIMARY KEY (`category_id`), **FULLTEXT KEY `label` (`label`)** ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DELAY_KEY_WRITE=1;
全文索引在下面的查询不使用* from xm_c where label ='TomCruise';
其中,因为它是这里使用:
SELECT * FROM xm_c其中MATCH(标签)AGAINST( '汤姆·克鲁斯');
mysql> explain select * from xm_c where MATCH(label) AGAINST('TomCruise'); > id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra **1 | SIMPLE | xm_c | fulltext | label | label | 0 | | 1 | Using where** mysql> explain select * from xm_c where label = 'TomCruise'; > id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra **1 | SIMPLE | xm_c | ALL | label | NULL | NULL | NULL | 5673360 | Using where**
有人能解释一下吗?不应该在这两个查询中使用INDEX?
使用FULLTEXT INDICES时是否存在语法约束?
答
全文索引只能用于MATCH() ... AGAINST
操作。一个=
运算符是非常不同的,与fts无关,它只是不能使用这种类型的索引。有关fts的更多信息可在manual中找到。
一匹马使用马蹄铁,一辆车使用轮胎。并且都可以将您从A带到B.
谢谢您的回答。据我所知,索引是为一列或一组列创建的,以实现更快的搜索。那么相应列的索引不应该用于涉及该列的任何搜索? – raghu 2011-03-07 12:01:52