使用带LIKE关键字进行模糊查询【MySQL知识】

你好,我们来谈谈MySQL中的LIKE。

上周我在帮助客户调试代码时遇到了这个问题。
他创建的查询是 SELECT FROM products WHERE name LIKE '%notebook%',但结果非常慢。
我告诉他检查是否使用了前导通配符 % 。

% 在 MySQL 中用于匹配任意长度的字符串。
例如,编写“notebook%”之类的名称会匹配“notebook A”、“notebook Pro”以及以“notebook”开头的任何其他名称。
另一方面,“%” “notebook”匹配任何以“notebook”结尾的内容。

最常见的是“%notebook%”,它匹配任何包含“notebook”的内容。
我以前在上海一家公司的数据库中看到过这一点。
他们用它来检查用户评论,但由于表中有数百万数据而陷入困境。
然后数据库管理员建议我重写此代码并将“%notebook%”更改为“notebook%”或“%”。
使用“Notebook”,我发现性能立即得到改善。

避免使用前导%非常重要,特别是对于具有大量数据的表。
索引失败是一个小问题,但重要的是它慢得令人发狂。
想想看,数据库必须暴力扫描整个表才能找到匹配项,这是多么繁琐的事情。

如果需要匹配%本身,则必须使用转义字符,例如反斜杠\。
在我看来,这就像“it\%s Good”一样使用,但这取决于你的MySQL版本和配置。

总之,LIKE非常好用,查看内容非常方便。
不过如果用%的话,要小心位置,不然查找会超时,很麻烦。

MySQL常见基础用法补充

mysql中模糊查询like和locate函数谁的效率高,为什么?

说白了,InnoDB全文检索比简单查询快1 00倍以上。
这件事比较复杂,有两个关键点:首先,最重要的是,当你在电商后台使用“%%”搜索“服装”时,它会扫描整个表。
去年我们跑的时候,3 000个币被卡了8 秒;还有一点是它使用全文查询的反向索引,就像图书馆目录一样。
搜索“skinny”,只需要查看索引表,就可以在毫秒内得到结果。
但创建该索引时必须使用全文,不能用普通索引代替。
一开始以为全文检索只会找中文,后来发现默认了英文单词。
但是,当innodb_ft_min_token_size设置为2 个字后,“a”字将被自动忽略。
很多人不重视这一点。

创建时添加全文,删除时使用RORO INDEX,您将有中间表的大小来监控维护。
说实话,这很令人不安。
建议不要将全文与普通索引混合在一起,尤其是带有通配符的问题。
如果可以清楚地区分场景,请使用全文。
例如,在过滤产品时使用 while,在搜索其他文档时使用全文。
等等,有一个。
如果在布尔搜索中使用太多“-”,则会超时。
最好查一下单词出现的频率,把它们加在前面。

mysql 模糊查询 concat()的用法详

结论:MySQL的concat()函数用于连接字符串,常用于模糊查询中动态构造LIKE条件。
基本用法是 CONCAT(str1 ,str2 ,...),如果参数为 NULL,则返回 NULL。
高级使用中的条件决定论;包括多领域联合模糊查询。
与 CONCAT_WS() 和 GROUP_CONCAT() 相比,CONCAT_WS() 有范围,GROUP_CONCAT() 在组内连接。
性能优化技巧包括避免 LIKE '%keyword%' 并考虑全文索引。
典型应用包括动态搜索和报告生成。
常见问题处理涉及处理 NULL 值和转义特殊字符。