为何Oracle中带字符串的SELECT IN查询比带数字的更快?
Oracle查询性能差异:字符串IN条件 vs 数字IN条件
数据表结构
create table my_table ( selecting_by NUMBER(10), wanted_value VARCHAR(100), )
对比查询语句
字符串形式查询
-- 字符串形式查询 SELECT wanted_value as wv FROM my_table WHERE selecting_by IN ('1', '2', '3');
数字形式查询
-- 数字形式查询 SELECT wanted_value as wv FROM my_table WHERE selecting_by IN (1, 2, 3);
测试结果
实际测试显示,无论是生产环境的Oracle数据库还是本地PoC环境,字符串形式的查询速度都远快于数字形式的查询:本地测试中前者速度是后者的2倍,生产环境中更是快30倍,性能差异极为显著。
本地PoC统计数据
- 字符串查询统计:LongSummaryStatistics{count=800, sum=78002, min=58, average=97.502500, max=690}
- 数字查询统计:LongSummaryStatistics{count=800, sum=136886, min=59, average=171.107500, max=3654}
性能定位
基于Java开发的代码经JProfiler分析验证,性能差异完全来自查询执行阶段,与查询语句的创建阶段无关。
内容的提问来源于stack exchange,提问作者Tuddi
相关产品推荐
相关产品推荐

