mysql полнотекстовый индекс используется для MATCH () ПРОТИВ, но не для = - PullRequest
0 голосов
/ 24 февраля 2011

Моя таблица 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 НЕ используется в запросе ниже:
select * from 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 Ответ

2 голосов
/ 24 февраля 2011

Полнотекстовый индекс можно использовать только в операциях MATCH() ... AGAINST.Оператор = очень отличается и не имеет ничего общего с fts, он просто не может использовать этот тип индекса.Более подробную информацию о fts можно найти в руководстве .

. Лошадь использует подковы, автомобиль использует шины.И оба могут привести вас от А до Б.

...