上一篇
📢 最新动态(2025-08)
MySQL 8.4 近期优化了字符串处理函数的性能,FIND_IN_SET
在大型数据集查询中效率提升了约15% 🚀,对于需要处理逗号分隔值的场景,这个函数变得更香了!
FIND_IN_SET
?FIND_IN_SET
是 MySQL 中一个超实用的字符串函数,专门用来查询某个值是否存在于逗号分隔的字符串列表中,比如你有一列数据存储了 "苹果,香蕉,橙子"
,想快速判断是否包含“香蕉”,用它就对了!
基本语法:
FIND_IN_SET(要查找的字符串, 逗号分隔的字段名)
返回值:
假设有张表 fruits
,tags
字段存储了水果分类:
SELECT * FROM fruits WHERE FIND_IN_SET('香蕉', tags) > 0;
✅ 会返回所有 tags
包含“香蕉”的记录(如 "苹果,香蕉"
或 "香蕉,橙子"
)。
-- 查找价格低于10元且包含"苹果"的水果 SELECT * FROM fruits WHERE price < 10 AND FIND_IN_SET('苹果', tags) > 0;
MySQL 默认区分大小写:
-- 如果存的是"apple",查"Apple"会返回0 SELECT FIND_IN_SET('Apple', 'apple,banana'); -- 输出 0
💡 解决方案:用 LOWER()
统一转小写
SELECT FIND_IN_SET('apple', LOWER('Apple,Banana')); -- 输出 1
必须严格逗号分隔
如果字符串是 "苹果 香蕉 橙子"
(用空格分隔),函数会失效!
不支持模糊匹配
-- 想查包含"果"字的所有水果?不行! SELECT * FROM fruits WHERE FIND_IN_SET('果', tags) > 0; -- 无效
💡 改用 LIKE
或正则表达式。
性能问题
对百万级数据频繁使用可能导致慢查询,建议对这类字段做规范化设计(如拆分成关联表)。
方法 | 适用场景 | 缺点 |
---|---|---|
FIND_IN_SET |
精确匹配逗号分隔值 | 不能模糊查询 |
LIKE '%值%' |
模糊匹配 | 可能误匹配(如"芒果"vs"苹果") |
关联表设计 | 需要高频查询/更新 | 需要改表结构 |
案例:统计包含每种标签的水果数量
SELECT '苹果' AS tag, COUNT(*) AS count FROM fruits WHERE FIND_IN_SET('苹果', tags) UNION ALL SELECT '香蕉', COUNT(*) FROM fruits WHERE FIND_IN_SET('香蕉', tags);
✅ 适合:快速查询规范化的逗号分隔值(如标签、分类)。
❌ 不适合:模糊匹配、非逗号分隔的数据或超大数据量。
下次遇到逗号分隔的字段查询,别再用 LIKE
硬扛啦,试试 FIND_IN_SET
吧! 🍌✨
本文由 风慧艳 于2025-08-02发表在【云服务器提供商】,文中图片由(风慧艳)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/518161.html
发表评论