SQL优化:你真的知道国家字符集的性能影响吗?

简介:

这里引入了一个专有名词: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类型的查询参数输入是,获得的执行计划是索引范围扫描:

609b4ce9d0ecc0594f8154c4b4cc40fde610e107

可以当我们指定NVARCHAR2的类型输入时,其执行计划变更为全表扫描,谓词信息部分提示,通过SYS_OP_C2C进行了过滤。

535962d7a322f57dd5cc404fc62c039dc8cbd5a2

那么如何解决这类问题呢?

如果传入的数据类型有误,纠正之;或者创建函数索引,Oracle 就能够使用这个索引。

SQL> CREATE INDEX IND_T_NNAME ON T(TO_NCHAR(NAME));

Index created.
524dccb8b7015118b04e636ad9f118e1d2189f46

当然在创建索引时,你也可以使用内部函数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>

对于这一类问题的关键,就是找出在哪一个环节造成的数据类型不一致,并最终修正之。


原文发布时间为:2018-05-31

本文作者:墨墨

本文来自云栖社区合作伙伴“数据和云”,了解相关信息可以关注“数据和云”。

相关文章
|
13天前
|
SQL 缓存 监控
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
本文详细解析了数据库、缓存、异步处理和Web性能优化四大策略,系统性能优化必知必备,大厂面试高频。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
|
22天前
|
SQL 存储 缓存
如何优化SQL查询性能?
【10月更文挑战第28天】如何优化SQL查询性能?
75 10
|
21天前
|
SQL 存储 缓存
SQL Server 数据太多如何优化
11种优化方案供你参考,优化 SQL Server 数据库性能得从多个方面着手,包括硬件配置、数据库结构、查询优化、索引管理、分区分表、并行处理等。通过合理的索引、查询优化、数据分区等技术,可以在数据量增大时保持较好的性能。同时,定期进行数据库维护和清理,保证数据库高效运行。
|
23天前
|
SQL 关系型数据库 MySQL
惊呆:where 1=1 可能严重影响性能,差了10多倍,快去排查你的 sql
老架构师尼恩在读者交流群中分享了关于MySQL中“where 1=1”条件的性能影响及其解决方案。该条件在动态SQL中常用,但可能在无真实条件时导致全表扫描,严重影响性能。尼恩建议通过其他条件或SQL子句命中索引,或使用MyBatis的`&lt;where&gt;`标签来避免性能问题。他还提供了详细的执行计划分析和优化建议,帮助大家在面试中展示深厚的技术功底,赢得面试官的青睐。更多内容可参考《尼恩Java面试宝典PDF》。
|
1月前
|
SQL 资源调度 分布式计算
如何让SQL跑快一点?(优化指南)
这篇文章主要探讨了如何在阿里云MaxCompute(原ODPS)平台上对SQL任务进行优化,特别是针对大数据处理和分析场景下的性能优化。
|
1月前
|
SQL 监控 数据库
慢SQL对数据库写入性能的影响及优化技巧
在数据库管理系统中,慢SQL(即执行缓慢的SQL语句)不仅会影响查询性能,还可能对数据库的写入性能产生显著的不利影响
|
1月前
|
SQL 关系型数据库 PostgreSQL
遇到SQL 子查询性能很差?其实可以这样优化
遇到SQL 子查询性能很差?其实可以这样优化
91 2
|
1月前
|
SQL Oracle 关系型数据库
Oracle SQL:了解执行计划和性能调优
Oracle SQL:了解执行计划和性能调优
56 1
|
1月前
|
SQL 存储 数据库
慢SQL对数据库写入性能的影响及优化技巧
在数据库管理系统中,慢SQL(即执行缓慢的SQL语句)不仅会影响查询性能,还可能对数据库的写入性能产生显著的不利影响
|
4月前
|
SQL 监控 数据库
下一篇
无影云桌面