gpt4 book ai didi

MySql 全文搜索似乎很慢,如何才能使其更快?需要任何优化吗?

转载 作者:行者123 更新时间:2023-11-29 21:42:42 26 4
gpt4 key购买 nike

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

我做了以下测试:

  • 最初,我在单列上应用了 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;

注意:nameandmeaningname,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 时,您应该拥有所有这 3 个(如果您正在执行所有 3 个 MATCH):

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

关于MySql 全文搜索似乎很慢,如何才能使其更快?需要任何优化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34367744/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com