mysql全文索引用于MATCH()AGAINST但不用于=

时间:2011-02-24 10:18:34

标签: mysql indexing full-text-search

我的表xm_c是这样创建的:

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;  

下面的查询中未使用FULLTEXT索引:
从xm_c中选择*其中label ='TomCruise';

这里使用的地方:
从xm_c中选择*,其中MATCH(标签)反对('TomCruise');


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时是否存在语法限制?

1 个答案:

答案 0 :(得分:2)

全文索引只能在MATCH() ... AGAINST操作中使用。 =运算符非常不同,与fts无关,它只是不能使用这种类型的索引。有关fts的更多信息,请参阅manual

一匹马使用马蹄铁,一辆汽车使用轮胎。两者都可以把你从A带到B。