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

  • Post author:
  • Post category:mysql


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







版权声明:本文为hunan961原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。