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

来源:互联网 发布:psp马甲卡淘宝 编辑:程序博客网 时间:2024/06/01 09:27

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会让索引失效,因此这种隐式转换,是需要注意避免。


原创粉丝点击