2011-02-24 147 views
0

我的表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时是否存在语法约束?

回答

1

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

一匹马使用马蹄铁,一辆车使用轮胎。并且都可以将您从A带到B.

+0

谢谢您的回答。据我所知,索引是为一列或一组列创建的,以实现更快的搜索。那么相应列的索引不应该用于涉及该列的任何搜索? – raghu 2011-03-07 12:01:52

相关问题