关于oracle 与 mysql 的索引与隐式转换的总结

本文探讨了MySQL中int与varchar类型的隐式转换及其对索引的影响,并对比了Oracle环境下VARCHAR2到NUMBER的转换如何影响查询效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.mysql中 int 与 varchar  类型的隐式转换:

  一,如果表定义的是varchar字段,传入的是int型数字,则会发生隐式转换

 二,表定义的是int字段,传入的是varchar数字字符串,不会发生隐式转换,如果在与数字字符串比较大小并且数字字符串还超过int定义的长度(会以字符串类型比较'$')会隐式转换

 三,隐式转换会扫描全表,造成字段的索引的阻塞。


2.在oracle中

create table tn (id number, name varchar2(1)); 
create index idx_tn on tn (id); 
create index idx_tn2 on tn (name);

select * from tn where id='123';     VARCHAR2->NUMBER的隐式转换,不会对索引产生影响

select * from tn where name=123;    这里Oracle会将数值类型的123转换为VARCHAR2字符类型,和name进行比较,会用用全表扫描,导致name的列索引失效


所以
NAME和VARCHAR2之间可以进行隐式转换,其中VARCHAR2->NUMBER不会导致索引失效,NUMBER->VARCHAR2会让索引失效,因此这种隐式转换,是需要注意避免。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值