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 查询不准确可以换分词器,或者导入自定义的词典。
|