如何在SQL中使用LIKE?模糊查询的模式匹配技巧

哦,你说的像教科书一样详细。
但当我开始学习SQL时,我也遇到了类似的问题。
我来说说我遇到的真实情况吧。

当时我接手了公司的旧系统,用户抱怨搜索太慢。
我检查了一下,发现它们都依赖于 LIKE '%keyword%' 方法。
结果,每次都必须扫描整个表。
数据库表不小;有几万条记录,马上就关闭了。
我检查了很长时间,终于记得给客户端添加了一个标签,这样速度就快了一些。
但如果后者前面有一个像'%keyword%'这样的关键字。
后来我发现该标签根本停止工作并且仍然很慢。
因此,我非正式地得到了一个教训:如果搜索词以%开头,那么索引基本上就没用了。

有一次,我正在更改 ERP 系统中的数据。
该系统中的产品代码有时是“%”;有一些特殊符号,例如“_”。
我想编写一个查询来选择这些。
起初,我只是使用 'Product Code LIKE '%_%' ESCAPE '\' 就出错了。
系统直接给我报错,说转义字符写错了。
后来,我是查看手册,发现必须使用ESCAPE子句来指定转义字符。
幸运的是,这只是一个小问题,可以修复。

再举个例子,我遇到了需要使用正则表达式的情况。
是国外的系统,数据格式很乱,得用正则表达式才能找到。
例如,检查您的电子邮件;您必须使用正则表达式“^[a-zA-Z0-9 ._%+-]+@[a-zA-Z0-9 .-]+\.[a-zA-Z]{2 ,}$”。
此时,LIKE 是不够的,只能使用 REGEXP 或 RLIKE。
但使用正则表达式查询性能通常较差。
我有一个项目。
随着数据库的增长,使用正则表达式搜索需要一天半的时间。
最后,使用全文搜索速度更快。

所以如果你能用LIKE解决它,就不要使用正常的规则。
如果没有,请先尝试 % 和 _。
如果遇到特别复杂的事情,请重新考虑通常的规则。
对于索引,要看数据库是否支持。
有些数据库很好地支持“%keyword%”,而其他数据库则不然。

您问的问题非常详细。
都是有用的。
让我总结一下我从错误中吸取的一些教训。
1 .不要以%开头搜索词,因为索引基本上没有用。
2 .如果数据中有特殊字符,不要忘记使用ESCAPE进行转义。
3 、正则表达式虽然强大;很慢。
LIKE 可用于插入正则表达式。
4 、标签是个好东西;但这取决于数据库是否支持它们。

关于你的理论已经足够了,我会告诉你我的经历。
您使用什么取决于您的环境和数据量。
我以前从未接触过这个地方。
我不敢说这是粗鲁,但我上面提到的错误是我踩过的危险。

SQL多表模糊查询

说一下我最近遇到的坑吧。

上周一位客户问我如何优化他们系统的搜索速度,所以我考虑了一下。
你所提出的论点是完全正确的。

你看,他们用%通配符来做模糊查询,但是他们发现数据量越大,需要的数据就越多。
我测试了它,例如使用 LIKE '%keyword%'。
当关键字位于开头或中间时,效率非常低。
这些通配符,尤其是百分号前后的通配符,使得数据库无法使用索引,完全依赖全表扫描。

后来,他们转向全文索引,效果立竿见影。
尽管通配符在 T-SQL 中以这种方式使用,但它是一个古老的年鉴。
现在重要的是在 EF Core 或 Direct SQL 中使用 CONTAINS 或 FullTextSearch。
这个东西必须与关键字字段匹配。
你没有看错,它是专门用来存储提取的关键词的。
这样,搜索时间很快,并且还支持分词和词重等高级功能。

我使用了你前面提到的JS过滤。
其实可以在前端过滤掉明显不相关的结果,减轻数据库的压力。
例如,使用正则表达式删除纯空格或特殊符号。
但是,请注意边界条件。
有时用户会故意输入空格。
例如,当搜索“笔记本”时,他们可能想找到华为,纯JS过滤不会检测到。
因此,该方法适用于初步筛选,并不能完全可靠。

还有,你说不需要通配符,依靠JS来实现搜索提示。
这个主意太棒了!我最近在一个电子商务项目中这样做了。
当用户输入时,后端使用 WebSocket 实时返回匹配的产品,而无需等待用户单击搜索按钮。
用户选择提示然后发送完整的请求。
这种用户体验令人难以置信。
数据库压力更小,用户感觉更快,双赢。

但是对于这种实时搜索提示,后端也需要考虑性能。
如果您使用像 Node.js 这样的单线程,那么当并发量很大时,它可能会卡住。
我们使用Redis进行缓存来存储用户输入和匹配结果,这显着提高了响应速度。

无论如何,这取决于你。
通配符也适用于简单的场景。
对于复杂的场景,可以考虑全文索引或前端支持。
这个想法是减少对数据库的操作,尤其是全表扫描。

sql中多个like怎么写 掌握多条件like查询技巧

说实话,当我第一次理解阴数据这个问题时,就像踩着一块黑石头过河一样。
然后我真的对喜欢感到困惑。
但后来我陷入了很多陷阱,我慢慢想出了一些窍门,我想和你谈谈。

获取 AND/OR 的示例。
记得有一次,我给客户开户时,看到桌子上有一个姓王、名“明”的男人。
我首先从用户那里写了 WHERE last_name YOU WANT '%王%' AND first_name '%明%',但它运行得像个螺丝钉。
后来数据库管理员表明,如果你想把last_name改成'王%',把first_name改成'AMO'%明,两个前缀就会匹配,查询速度会快一点点。
这是一个典型的通配符位置问题——前缀%和后缀%的效果有很大不同。

说到更有趣的 OR 组合。
当我搜索一家电子商务公司时,他们想查“苹果手机”或“iPhone 1 2 ”。
如果直接写 OR 条件,根本不符合数据库的常识——“苹果手机”和“iPhone 1 2 ”的行会匹配,但也会给出一个不重要的项目,比如“苹果手机维修服务”。
然后我建议他们使用嵌套括号,例如 WHERE (product_name WANTED '%iPhone%' OR Product_name WANTED '%iPhone 1 2 %'),然后是连续结果。
这告诉我,在提出模糊问题时,括号比你想象的更重要。

小心索引。
记得刚入行的时候,有一个项目需要全文索引。
你猜怎么着?红衣搜索“百万条商品数据”其实比直接使用“%red%”还要慢!后来查资料才知道,全文索引是专门针对自然语言搜索优化的,但是如果用通配符搜索“red dress”,就得执行全表了。
这个阅读太深了——先别急着到达全文索引,先看看数据的大小。
有一个原因让我印象特别深刻。
该旅行社正在寻找“有孩子的家庭”的套餐,要求是“3 -6 岁的儿童”和“套餐包含家长活动”。
我首先写了一个3 到6 之间的UBI child_age和像'%parent%';这样的action,但我仍然发现实现不好。
后来技术总监想了想,直接给孩子加了索引,搜索就变得很快了。
这就是为什么在类似的字段中复合索引有时比简单索引更有用。
当然,这需要经常使用 EXPLANATION 命令进行测试 - 我有一个客户在类似的领域构建了数千个数据,因为他忘记查看实施计划,最终坚持在 PPT 中的数据库。

最后,我想说,虽然研究如果使用得当,是一个神奇的工具,但如果使用不当,它就是一颗定时炸弹。
我现在的态度是:想用就尽量加前缀%。
如果不行,就分成条件分别等待,最后合并成一个时间表。
当数据量超过一万时,这种方法最有效。
当我在电子商务平台上使用此业务设置时,搜索实际上比直接使用全文索引更快。
当然,这要看具体情况——物流公司来找我优化,居然在类似的字段里加了触发器,最后就带来了数据库。
我不想多说了……
总之,模糊题的关键是理解“索引前缀”这个东西。
想想看,在扫描数据库表的时候,能够使用前缀索引来打开插件,而不需要回表去查数据。
那速度啦tsk。

SQL模糊查询怎么用 模糊查询的5种匹配模式

SQL模糊搜索就是用LIKE加%和_。
%可以找到开头或结尾,_可以找到中间的一个字符。
注意,%太多会导致全表查找,效率低下。
对大文本使用全文索引,对小数据使用 LIMIT。
Case 和 NULL 是分开处理的。
记住要防止SQL注入和字符集一致性。
如果您有复杂的要求,请使用常规索引或全文索引。
您选择哪种方法取决于您的具体需求。