注册
达梦数据库LIKE 与 INSTR 模糊查询效率实测
培训园地/ 文章详情 /

达梦数据库LIKE 与 INSTR 模糊查询效率实测

秋渡 2026/04/28 562 0 0

在日常业务开发中,字符串模糊匹配是地址检索、名称筛选等场景的高频需求。在达梦数据库中,LIKE 操作符与 INSTR 字符串定位函数是最常用的两种模糊匹配方案。很多人都会纠结:两者到底谁的效率更高?索引对它们的性能影响有多大?
我将基于1000 万条真实模拟的业务数据,来进行测试。

一、测试环境与数据准备

首先我创建了模拟业务的 users 用户表,包含姓名、性别、身份证号、地址 4 个核心字段,总数据量 1000 万条,所有字段均为非空填充,完全贴合真实业务场景:image.png
测试用例设计:
1、全模糊匹配:LIKE '%关键词%',匹配字段任意位置包含目标字符串
2、函数匹配:INSTR(字段, 关键词) > 0,与全模糊匹配语义完全等价
3、前缀模糊匹配:LIKE '关键词%',匹配字段以目标字符串开头的记录,验证索引的优化效果

二、实测结果与分析

1、全模糊匹配 LIKE '%湖北省武汉市%'
image.png
测试结果:
执行耗时 1.244 秒,执行计划为全表扫描。

2、INSTR 函数匹配 INSTR(DZ, '湖北省武汉市') > 0
image.png
测试结果:
执行耗时 0.724 秒,执行计划同样为全表扫描,但耗时较全模糊LIKE降低了约 33%。

两者均为全表扫描,性能差异的核心在于底层执行的 CPU 开销不同:
LIKE '%xxx%' 需要对每一行字符串做通配符模式匹配,包含通配符解析、正则回溯等额外开销,长字符串场景下性能损耗更明显;

INSTR 是专用的子串定位函数,采用更高效的子串匹配算法(如 KMP),无通配符解析开销,找到子串首次出现的位置即可返回结果,无需全串回溯匹配,CPU 执行效率更高。

3、为地址dz添加索引,使用前缀模糊匹配 LIKE '湖北省武汉市%'
image.png
image.png
测试结果:
执行耗时 0.001 秒(1 毫秒),较全表扫描场景性能提升上千倍,执行计划为索引范围扫描。
LIKE 'xxx%' 是前缀匹配,完全符合 B 树索引的有序排序规则。达梦数据库可以直接通过idx_users_dz索引,快速定位到以湖北省武汉市开头的索引条目范围,无需扫描全表,甚至可以直接通过索引统计信息快速得到count结果,因此耗时直接降到了毫秒级。

三、结论

LIKE 语法适用于前缀模糊查询场景,这是 LIKE 的绝对优势,LIKE '前缀%'完全符合 B 树索引的左前缀匹配规则,可直接走索引范围扫描。INSTR 函数适用于千万级数据量甚至更大数据量的场景,性能远超LIKE '%关键词%'写法。当两种语法查询速度相同时,更推荐使用LIKE语法,LIKE语法的可读性更高。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服