坑爹的NVARCHAR2

Posted robinson1988

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了坑爹的NVARCHAR2相关的知识,希望对你有一定的参考价值。

今天帮一个学生优化SQL,遇到NVARCHAR2问题。具体SQL因为涉及保密就不贴了。但是可以模拟一下。


create table t1(id number,name nvarchar2(200));
create table t2(id number,name varchar2(200));

insert into t1 select rownum,table_name from dba_tables;
insert into t2 select rownum,object_name from dba_objects;
commit;

select * from t1,t2 where t1.name=t2.name and rownum<=10;

SQL> select * from t1,t2 where t1.name=t2.name and rownum<=10;

已选择10行。


执行计划
----------------------------------------------------------
Plan hash value: 808789222

----------------------------------------------------------------------------
| Id  | Operation           | Name | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------
|   0 | SELECT STATEMENT    |      |    10 |  4450 |    10  (10)| 00:00:01 |
|*  1 |  COUNT STOPKEY      |      |       |       |            |          |
|*  2 |   HASH JOIN         |      | 72191 |    30M|    10  (10)| 00:00:01 |
|   3 |    TABLE ACCESS FULL| T1   |  2780 |   583K|     7   (0)| 00:00:01 |
|   4 |    TABLE ACCESS FULL| T2   | 72009 |  8086K|     2   (0)| 00:00:01 |
----------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter(ROWNUM<=10)
   2 - access("T1"."NAME"=SYS_OP_C2C("T2"."NAME"))


表关联的时候,会自动的加上 SYS_OP_C2C 函数,想要T2 join列走索引还得搞个 函数索引 create index idx_t2 on t2(sys_op_c2c(name));

注意:表设计的时候,如果有2个表关联,关联列 要么全都是NVARCHAR2,要么全都是VARCHAR2,别来一样一个


以上是关于坑爹的NVARCHAR2的主要内容,如果未能解决你的问题,请参考以下文章

坑爹的微信授权配置

Lua: 好的, 坏的, 和坑爹的

TK1023: 坑爹的黑店

坑爹的AMH

坑爹的 Segmentation fault

记一次坑爹的ORA-01152&ORA-01110错误