已经在在数据库表中建了相应的fulltext索引,大概有10W来条数据,但是发现使用match against查询时需要0.x秒,如果进行字段排序则更加慢了,需要x.x秒,而使用like模糊查询时只需要0.0x秒,这样的话模糊搜索反而快了不少。 我在网上找的资料都是说fulltext搜索比用like快,为什么我的情况相反呢?在mysql 5.0.x和5.1.x版本上都试过,都是这样的情况!!!

解决方案 »

  1.   

    貌似myisam的全文索引不支持多字节字符哇?
      

  2.   

    看一下fulltext字段的内容是不是普遍都短,如果这样,like会更快一些否则麻烦提供一下表结构及部分记录
      

  3.   

    FULLTEXT分析程序会通过寻找某些分隔符来确定单词的起始位置和结束位置,例如' ' (间隔符号)、 , (逗号)以及 . (句号 )。假如单词没有被分隔符分开,(例如在中文里 ), 则 FULLTEXT 分析程序不能确定一个词的起始位置和结束位置。为了能够在这样的语言中向FULLTEXT 索引添加单词或其它编入索引的术语,你必须对它们进行预处理,使其被一些诸如"之类的任意分隔符分隔开。
      

  4.   

    我这里是专门建的一个用于搜索的索引表,因为要使中文单个字也能进行fulltext查询,已经在my.ini中将设置了ft_min_word_len=1,表结构如下:
    CREATE TABLE `search` (
      `id` int(11) NOT NULL auto_increment,
      `data` text,
      `tag` text,
      `type` tinyint(1) unsigned default '0',
      `fid` int(11) unsigned NOT NULL,
      PRIMARY KEY  (`id`),
      KEY `type` (`type`),
      FULLTEXT KEY `tag` (`tag`)
    ) ENGINE=MyISAM
      

  5.   

    现在的问题不是不支持中文的问题,而是使用全文搜索速度要比like搜索慢2个数量级的问题。*使用like查询:SELECT * FROM search WHERE `type` =2 AND DATA LIKE '%房%';
    (4088 row(s) returned)
    Execution Time : 00:00:00:000
    Transfer Time  : 00:00:00:063
    Total Time     : 00:00:00:063
    *使用fulltext查询:SELECT * FROM search WHERE `type` =2 AND MATCH(`tag`) AGAINST('房' IN BOOLEAN MODE);
    (4088 row(s) returned)
    Execution Time : 00:00:00:093
    Transfer Time  : 00:00:00:563
    Total Time     : 00:00:00:656这里的tag字段其实就是把data字段的内容分词之后的内容。
      

  6.   

    fulltext搜索不好用的,有些搜不出来