MySQL LIKE 通配符:%与_的高级过滤技巧及性能优化

小满
小满
发布时间:2026-10-16| 6人浏览过
原创

本文深入解析 MySQL 中用于 SQL 高级过滤的 LIKE 通配符,详细演示 %(匹配任意字符)与 _(匹配单个字符)的实际应用案例。针对以星号开头导致的搜索缓慢问题,提供具体优化建议,同时强调尾空格干扰及 NULL 值处理的注意事项,帮助开发者实现高效且准确的模糊查询。

通配符在 SQL 过滤中的作用

通配符(Wildcard)是用于匹配值的一部分特殊字符,常用于构建搜索模式(Search Pattern)。搜索模式由字面值和通配符组合而成,是对精确匹配操作符的重要补充,适用于需要“模糊”筛选数据的场景。

在使用通配符时,需明确其与标准操作符的区别:操作符通常要求数据完全确认,而通配符允许部分字符的不确定性。以下是两种最常用的 MySQL 通配符及其应用场景。

第1步:掌握 % 通配符——匹配任意长度字符

目的:查找包含特定前缀、后缀或中间包含某字符串的记录。

原理:% 表示零个、一个或多个任意字符。

示例 1:以特定字符串开头的匹配

SELECT * FROM products
WHERE products.prod_name LIKE 'jet%';

上述语句检索所有以 jet 开头的产品名称。% 告诉 MySQL 接受 jet 之后的任意字符序列。需要注意的是,搜索是否区分大小写取决于 MySQL 的配置(如排序规则 Collation)。若配置为区分大小写,'jet%' 将不匹配 JetPack 1000。

示例 2:包含特定子串的匹配

SELECT * FROM products
WHERE products.prod_name LIKE '%anvil%';

该模式匹配任何位置包含 anvil 的产品名称。

示例 3:特定首尾字符的匹配

SELECT * FROM products
WHERE products.prod_name LIKE 's%e';

此条件筛选以 s 开头且以 e 结尾的名称,中间可包含任意数量的字符。

第2步:理解 _ 通配符——仅匹配单个字符

目的:对字符位置有严格要求的模糊查询。

原理:_ (下划线)只匹配单个字符,不能多也不能少。

SELECT * FROM products
WHERE products.prod_name LIKE '_ ton anvil';

示例中的 _ 代表第一个位置的任意单个字符。例如,它可能匹配 ton anvil(如果前面有空格或其他单字符),但不会匹配 tton anvil。与 % 可匹配零字符不同,_ 必须严格对应一个字符。

第3步:处理尾空格与 NULL 值的陷阱

在使用通配符时,数据 cleanliness 直接影响结果准确性。

  • 尾空格问题:如果字段值为 'anvil '(含尾部空格),而查询使用 LIKE '%anvil',由于尾部多出的空格未被 % 覆盖(此处 % 在 l 之前),可能导致意外失败。解决方案:始终在通配符模式末尾保留 %,即使用 LIKE '%anvil%' 以确保包容性。
  • NULL 值例外:NULL 值无法通过任何通配符匹配。即使执行 WHERE prod_name LIKE '%',也无法选出 prod_name 为 NULL 的行。如需处理 NULL,应结合 IS NULL 判断。

通配符使用的性能优化建议

虽然通配符功能强大,但其处理机制通常比精确匹配耗费更多计算资源。为了优化数据库查询性能,请遵循以下原则:

  1. 避免在模式起始处使用通配符:将 % 或 _ 放在搜索模式的最前端(如 LIKE '%text')会导致数据库进行全表扫描,效率最低。如果可能,尽量确定前缀,使用 LIKE 'text%'。
  2. 优先使用其他操作符:如果能用 =、BETWEEN 或正则表达式更高效地解决问题,则不要盲目使用通配符。
  3. 适度使用:仅在确实需要模糊逻辑时才启用通配符功能。

以上就是 MySQL LIKE 通配符在 SQL 高级过滤中应用的详细内容,更多关于 MySQL 模糊查询优化的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。