
1 StarkWhite 2019-09-25 18:36:25 +08:00 看起来就是两个字段任何一个包含搜索关键词的条件, 为什么要 CONCAT(title, content) ? 而不是分开两个字段走正则? SELECT * FROM sys.Comment WHERE title REGEXP 'PORTS|PUMA|Michael.{0,3}Kors' OR content REGEXP 'PORTS|PUMA|Michael.{0,3}Kors' 可以改成 UNION SELECT * FROM sys.Comment WHERE title REGEXP 'PORTS|PUMA|Michael.{0,3}Kors' UNION SELECT * FROM sys.Comment WHERE content REGEXP 'PORTS|PUMA|Michael.{0,3}Kors' 都分别用几个常用关键词试试,哪个快用哪个,EXPLAIN 对比你的和我发的第一条,结果都一样, 第二条多了两步,但还是不好判断 |
2 StarkWhite 2019-09-25 18:36:52 +08:00 @StarkWhite 还可以把正则换成 LIKE 试试 |
3 deepall OP @StarkWhite 为什么不使用 LIKE, 使用 LIKE,类似与 LIKE '%PORTS%' OR LIKE '%PUMA%',LIKE 以 % 开头的条件并不使用索引,因此在 cpu 的使用上不会有太大的变化 |
4 gz911122 2019-09-25 19:05:28 +08:00 建议优化 es 版本.... |
5 bbao 2019-09-25 19:10:21 +08:00 这种需求,我会同步一份数据到 ES 里,从 ES 里面做关键字匹配,不会在 DB 里做。 |
6 jetyang 2019-09-25 19:15:44 +08:00 DB 做这种检索效率极低,用 ES 才是正道 |
8 arrow8899 2019-09-26 09:44:14 +08:00 这不是 mysql 的强项啊,es 查询不准确可以换分词器,或者导入自定义的词典。 |