上一篇
"小王最近负责公司电商平台的后台优化,用户经常抱怨搜索功能不够智能——输入'苹果手机'找不到'iPhone',输入'耐克运动鞋'也搜不全相关商品,产品经理要求他改进搜索功能,但小王对MySQL的模糊查询只停留在LIKE '%关键词%'
的层面..."
如果你也遇到过类似困扰,今天这篇文章将彻底改变你对MySQL模糊查询的认知,让我们一起来探索那些让数据检索变得更智能的技巧!
SELECT * FROM products WHERE name LIKE '%苹果%';
这个查询会找出所有名称中包含"苹果"的商品,苹果手机"、"红苹果"、"苹果充电器"等。
_
代表单个字符-- 查找以"苹果"开头的商品 SELECT * FROM products WHERE name LIKE '苹果%'; -- 查找第二个字是"果"的商品 SELECT * FROM products WHERE name LIKE '_果%'; -- 查找正好5个字符且以"手机"结尾的商品 SELECT * FROM products WHERE name LIKE '___手机';
当LIKE无法满足复杂需求时,正则表达式是更强大的工具:
-- 查找包含"苹果"或"iPhone"的商品 SELECT * FROM products WHERE name REGEXP '苹果|iPhone'; -- 查找以数字开头的商品名称 SELECT * FROM products WHERE name REGEXP '^[0-9]'; -- 查找包含特定模式的商品编号 SELECT * FROM products WHERE product_code REGEXP '^[A-Z]{2}[0-9]{4}$';
对于大文本字段的搜索,全文检索比LIKE高效得多:
-- 首先确保表有FULLTEXT索引 ALTER TABLE products ADD FULLTEXT(name, description); -- 自然语言模式搜索 SELECT * FROM products WHERE MATCH(name, description) AGAINST('智能手机 防水' IN NATURAL LANGUAGE MODE); -- 布尔模式搜索(更精确控制) SELECT * FROM products WHERE MATCH(name, description) AGAINST('+苹果 -手机' IN BOOLEAN MODE);
-- 这个查询可以使用name字段的索引 SELECT * FROM products WHERE name LIKE '苹果%'; -- 这个查询无法使用索引,全表扫描 SELECT * FROM products WHERE name LIKE '%苹果';
对于必须使用前导通配符的场景,可以考虑:
-- 添加反向字段并建立索引 ALTER TABLE products ADD COLUMN name_reverse VARCHAR(255); UPDATE products SET name_reverse = REVERSE(name); CREATE INDEX idx_name_reverse ON products(name_reverse); -- 使用反向查询 SELECT * FROM products WHERE name_reverse LIKE REVERSE('果苹') + '%';
-- 使用NGRAM分词(MySQL 5.7+) ALTER TABLE products ADD FULLTEXT(name) WITH PARSER ngram; -- 搜索"苹果手机"会匹配"苹果"和"手机"的组合 SELECT * FROM products WHERE MATCH(name) AGAINST('苹果手机' IN BOOLEAN MODE);
-- 搜索包含"50%"的记录 SELECT * FROM discounts WHERE description LIKE '%50\%%' ESCAPE '\';
SELECT * FROM products WHERE CONCAT(name, ' ', description) LIKE '%智能手机%';
LIKE '关键词%'
+ 索引REGEXP
正则表达式FULLTEXT
全文检索NGRAM
分词器没有最好的查询方式,只有最适合当前场景的方案,根据你的数据特点和查询需求,灵活选择这些技巧,你的数据检索能力将大幅提升!
2025年7月数据库技术实践分享
本文由 幸情韵 于2025-07-31发表在【云服务器提供商】,文中图片由(幸情韵)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/492286.html
发表评论