gpt4 book ai didi

mysql全文索引性能问题

转载 作者:行者123 更新时间:2023-11-29 01:50:02 24 4
gpt4 key购买 nike

我有一个包含不同字段的表,特别是姓名 (varchar 255)、姓氏 (varchar 255),但考虑到最大长度限制,实际上我将它们用作姓名 (varchar 90) 和姓氏 (varchar 70)。

这个表有大约 620,000 行,我正在做很多查询,如下所示:

SELECT * FROM table WHERE name LIKE "%word1%" AND surname LIKE "%word2%"

我在两个字段上都添加了 FULLTEXT 索引(也尝试过一个索引包含两个字段),但性能比没有任何索引的查询慢。

我错过了什么?

提前致谢

编辑:根据您的回复,我会向您展示一些结果。

案例A。没有任何索引的表查询:

SELECT * 
FROM `table`
WHERE `name` LIKE '%word1%'
AND `surname` LIKE '%word2%'

执行两次分别在 0.8870 和 0.8952 秒内解决

案例 B。我在姓名上添加了 FULLTEXT 索引,在姓氏上添加了 FULLTEXT 索引。查询

SELECT * 
FROM table
WHERE match(name) AGAINST ('+word1*' in boolean mode)
AND match(surname) AGAINST ('+word2*' in boolean mode)

执行两次分别在 0.9647 和 1.0380 秒内解决

注意:表有 InnoDB 引擎,不幸的是 MySQL 低于 5.6;由于外键,我无法轻松地从 InnoDB 转换为 MyISAM。

其他想法?再次感谢

最佳答案

如果用Mysql(InnoDB)的全文搜索boolean模式会更好。更多详情 here

全文搜索旨在高效处理像您这样的情况,并且比全文搜索快得多。

针对您的案例的全文搜索查询可能如下所示:

SELECT * FROM table WHERE match(name) against ('+word1*' in boolean mode) AND match(surname) against ('+word2*' in boolean mode);

关于mysql全文索引性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48167623/

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