簡體   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