SQL优化:你真的知道国家字符集的性能影响吗?
最近有朋友在『云和恩墨大讲堂』微信群内咨询了一个问题:
复制,入库进程所有涉及主键列是varchar2类型的update语句,都被sys_op_c2c隐形转换,造成全表扫描。
这里引入了一个专有名词:sys_op_c2c 。这是什么东西呢?
SYS_OP_C2C 是一个内部函数,功能是将VARCHAR2的数据类型转换成国家字符集的NVARCHAR2类型,内部通过TO_NCHAR函数实现。
我们来看一下这个问题的模拟。
SQL> CREATE TABLE T (ID NUMBER, NAME VARCHAR2(128));
Table created.
SQL> INSERT INTO T SELECT ROWNUM, OBJECT_NAME FROM ALL_OBJECTS;
72147 rows created.
SQL> CREATE INDEX IND_T_NAME ON T(NAME);
Index created.
首先我们看,当使用VARCHAR2类型的查询参数输入是,获得的执行计划是索引范围扫描:
可以当我们指定NVARCHAR2的类型输入时,其执行计划变更为全表扫描,谓词信息部分提示,通过SYS_OP_C2C进行了过滤。
那么如何解决这类问题呢?
如果传入的数据类型有误,纠正之;或者创建函数索引,Oracle 就能够使用这个索引。
SQL> CREATE INDEX IND_T_NNAME ON T(TO_NCHAR(NAME));
Index created.
当然在创建索引时,你也可以使用内部函数SYS_OP_C2C,两者是完全相同的:
CREATE INDEX IND_T_NNNAME ON T(SYS_OP_C2C(NAME));
在MOS上的文档:732666.1 记录了类似这样一个案例。其解决方案中提到,在JDBC的设置中,可能因为 defaultNChar 的设置,导致传入值都被作为NVARCHAR2:
Ensure that your bind "string" datatype and column datatype are the same. A java example where this can occurs is when defaultNChar=TRUE.
This will cause strings to bind as NVARCHAR2 causing the predicate that are subset datatypes to be converted to NVARCHAR2.
e.g.
-Doracle.jdbc.defaultNChar=true
<connection-property name="defaultNChar">true</connection-property>
对于这一类问题的关键,就是找出在哪一个环节造成的数据类型不一致,并最终修正之。
资源下载
关注公众号:数据和云(OraNews)回复关键字获取
2018DTCC , 数据库大会PPT
2017DTC,2017 DTC 大会 PPT
DBALIFE ,“DBA 的一天”海报
DBA04 ,DBA 手记4 电子书
122ARCH ,Oracle 12.2体系结构图
2017OOW ,Oracle OpenWorld 资料
PRELECTION ,大讲堂讲师课程资料
近期文章
仅仅使用AWR做报告? 性能优化还未入门
实战课堂:一则CPU 100%的故障分析
杨廷琨:如何编写高效SQL(含PPT)
一份高达555页的技术PPT会是什么样子?
大象起舞:用PostgreSQL解海盗分金问题
SQL优化:你真的知道国家字符集的性能影响吗?相关推荐
- 智能SQL优化工具--SQL Optimizer for SQL Server(帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 )...
SQL Optimizer for SQL Server 帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 SQL Optimizer for SQL Server 让 SQL Serve ...
- mysql 嵌套查询性能_mysql SQL优化之嵌套查询-遁地龙卷风
(-1) 写在前面 这篇随笔的数据使用的是http://blog.csdn.net/friendan/article/details/8072668#comments里的,里面有一些常见的select ...
- SQL 优化核心思想
SQL 优化核心思想 SQL 优化必懂的概念 概念 英文 含义 影响 示例 计算 临界 基数 Cardinality 某个列唯一键(Distinct Keys)的数量 基数的高低影响列的数据分布 性别 ...
- 18000字的SQL优化大全,收藏直接起飞!
来源:数据分析不是个事儿 很多朋友在做数据分析时,分析两分钟,跑数两小时? 在使用SQL过程中不仅要关注数据结果,同样要注意SQL语句的执行效率. 本文涉及三部分,篇幅较长,建议收藏后翻看: SQL介 ...
- 数据库应用+SQL优化+Git
数据库应用 1.1 概念 1.1.1 什么是数据库 1.1.2 关系型和非关系型 1.1.3 关系型数据库 1.2 Mysql数据库 1.2.1 MySQL数据存放在哪里? 1.2.2 MySQL服务 ...
- 《收获,不止SQL优化》读书笔记
整体性能分析 AWR.ASH.ADDM.AWRDD 整体分析调优工具 AWR:关注数据库的整体性能的报告: ASH:数据库中的等待事件与哪些SQL具体对应的报告: ADDM:oracle给出的一些建议 ...
- 18000 字的 SQL 优化大全,收藏直接起飞!
导读:很多朋友在做数据分析时,分析两分钟,跑数两小时?在使用SQL过程中不仅要关注数据结果,同样要注意SQL语句的执行效率. 本文涉及三部分,篇幅较长,建议收藏后翻看: SQL介绍 SQL优化方法 S ...
- 史上最全SQL优化方案(二)
接上篇!! 4 基础优化 a 优化思路 定位问题点吮吸:硬件–>系统–>应用–>数据库–>架构(高可用.读写分离.分库分表). 处理方向:明确优化目标.性能和安全的折中.防患未 ...
- 中秋节,送上一次非常有趣的SQL优化实战经历
点击上方"搜云库技术团队",选择"设为星标" 回复"1024"或"面试题"获取4T学习资料 补充:看到好多朋友后台留言说 ...
最新文章
- VC下提前注入进程的一些方法2——远线程带参数
- 由粗到精学习LVI-SAM基础:多传感器内外参标定原理
- openfire 插件开发
- Object.keys方法拿到对象的key值
- 计算1!+2!+...+n!
- 《FusionCharts学习及使用笔记》之 第一篇
- 用 或 || 取代常规 if - else 结构
- 转载 java抽象类与接口的区别
- 【emWin】例程十:bmp图片显示
- wpewebkit在ubuntu18.04上编译配置
- 前端基础练习项目——网页版扫雷
- 大数据培训:hadoop基础教程
- 关于魔兽的电脑优化配置方法
- 【Android Studio】如果你不管怎么折腾都提示Minimum supported Gradle version is 7.0.2. Current version is 6.8,请看这里
- 【安全】如何防止他人恶意调试你的web程序
- kanziopengl杂谈
- 雷军在北京大学的演讲
- vuejs的学习笔记
- 世界节约水资源日PPT模板
- android sdk manager 快速下载sdk
热门文章
- Bootstrap让内容块居中
- 定制Bootstrap3
- c语言链表错误,C语言创建链表错误之通过指针参数申请动态内存实例分析
- Linux 编译pe,如何在PE中将PE(可移植可执行文件)格式转换为ELF
- 精密制造业行业_精密制造业行业前景(全球精密制造业排名)
- python二进制图片压缩传输_python 中 base64 压缩图片,用post传送
- 中移物联网答案java_【分享】中移物联网校园招聘笔试-java
- 2,上传电影,udp,异常处理,socketserver
- 实验吧之【Forms、天网管理系统】
- 七:Java之封装、抽象、多态和继承