SQL优化:数据类型NVARCHAR2

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;  
    
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列走索引,需要建立函数索引 

SQL:create index idx_t2 on t2(sys_op_c2c(name));

注意:表设计的时候,如果有2个表关联,关联列 要么全都是NVARCHAR2,要么全都是VARCHAR2,需要相同不要一个表一个样。。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值