繁体   English   中英

MySql全文搜索似乎很慢,如何使它更快? 是否需要任何优化?

[英]MySql FullText Search seems slow, How can I make this faster? Any Optimization required?

我有一个包含100万条记录的表,并希望应用更快的方法来针对任何搜索查询获取记录。 由于我对mysql全文搜索不好。

我做了以下测试:

  • 最初,我将MATCH AGAINS应用于MATCH AGAINS ,它可以快速返回结果。
  • 其次,我将MATCH AGAINS应用于两列,返回速度非常慢。
  • 然后,我进行了列优化,将两列合并为一列,并在计算列上应用了MATCH AGAINS 第一次返回时返回的速度非常慢,但是在使用相同搜索词的第二次尝试中返回的速度却相当快。

我的查询有任何问题,我应该如何通过更多优化对其进行修改?

 select name, meaning, m.gender, m.similar
        FROM
        NAMES n
        INNER JOIN meta m ON m.nameid = n.id
        WHERE MATCH (nameandmeaning) AGAINST ('searchterm*' IN BOOLEAN MODE) 
        AND meaning IS NOT NULL
        ORDER BY LENGTH(m.similar) DESC
        LIMIT 0 , 10;

注: nameandmeaning是联合而成的name, meaning

我的表结构如下:

CREATE TABLE NAMES (
  id BIGINT(20) NOT NULL AUTO_INCREMENT,
  name VARCHAR(100) NOT NULL,
  meaning VARCHAR(2000) DEFAULT NULL,
  nameandmeaning VARCHAR(2000) DEFAULT NULL,
  PRIMARY KEY  (id),
  FULLTEXT KEY constains_name(name,meaning),
  FULLTEXT KEY contains_namemeaing (nameandmeaning)
) ENGINE=MYISAM AUTO_INCREMENT=67846 DEFAULT CHARSET=latin1;
CREATE TABLE NAMES (
  id BIGINT(20) NOT NULL AUTO_INCREMENT,
  name VARCHAR(100) NOT NULL,
  meaning VARCHAR(2000) DEFAULT NULL,
  -- skip this:  nameandmeaning VARCHAR(2000) DEFAULT NULL,
  PRIMARY KEY  (id),
  FULLTEXT KEY constains_name(name, meaning),
  -- skip this:  FULLTEXT KEY contains_namemeaing (nameandmeaning)
) ENGINE=MYISAM AUTO_INCREMENT=67846 DEFAULT CHARSET=latin1;

然后这些应该可以快速工作:

MATCH(name) AGAINST (...)
MATCH(meaning) AGAINST (...)
MATCH(name, meaning) AGAINST (...)

升级到InnoDB时,应该具有以下所有三个功能(如果要执行所有这三个匹配):

  FULLTEXT (name),
  FULLTEXT (meaning),
  FULLTEXT (name, meaning)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM