mysql全文索引性能问题

标签 mysql performance

我有一个包含不同字段的表,特别是姓名 (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/

相关文章:

javascript - 为什么 Google Chrome 会警告由于 For 循环而无法优化函数?

c# - 使用 ADO.NET 更新 MySQL 行

mysql - SQLSTATE[42000] : Syntax error or access violation: 1064. 找不到语法错误

MySQL:自然连接两次

javascript - HTML 的许多类名会影响性能吗?

php - .htaccess 中的 RewriteRules 会影响站点的速度吗?

linux - iperf3 Windows带宽比linux慢很多

javascript - 取消选中大型 (1000) 数据集上的复选框时,Knockout 速度很慢

java - 将多个 PreparedStatements 合并在一起

mysql - 如何将 bool 值从 Handlebars 传递到 Node?