执行效率的问题,来者给分!

Albertleon 2003-12-12 03:55:23
请问各位大大:

小弟我想请大家看下面的语句:
select 某个字段或* from table1,table2 where table1.field1=table2.field2,其中,table1的field1字段是number类型,table2的field2字段是varchar2类型。用转换函数to_number(table2.field2)自然可以实现上面where语句中的比较关系,但这是显式转换。其实用隐式转换也行。
在下的问题就是:显示转换和隐式转换,到底谁的执行效率高呢?(因为在下要处理的表中有三千多条记录)
而在下数次试验发现,有的时候,用显示转换的查询,速度快些;但有的时候,用隐式转换却又强点,不知这是为何呢?

请多发言,在线等待!
...全文
28 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
beckhambobo 2003-12-12
  • 打赏
  • 举报
回复
不建义使用函数索引,若基它不使用函数索引,哪更加慢,
可以利用执行计划查看哪个更快
都两者都建立索引,哪就不用函数
上面已分析清楚
onerest 2003-12-12
  • 打赏
  • 举报
回复
显示转换和隐式转换效率应该差不多把,不过,你可以尝试给tabel2.field2上建立函数索引:
create index I_F_table2_field2 on table2(to_number("field2"))...;

这样,在查询的时候用,显示转换就会有效率的提高.
不过,我看你说,几千条的数据,应该效果不是很明显
Albertleon 2003-12-12
  • 打赏
  • 举报
回复
xzou(亡狼补齿)兄,
1,如果我不使用to_number函数的话,会有什么结果呢?(就是说直接用where table1.field1=table2.field2,不进行任何转换)
2.如果2个表都没有索引的话,又会是什么情况呢?
3.另外,如果表table1具有索引(建立在field1上的索引),并假设两个表一样大,在进行table1.field1=table2.field2比较的时候,是将table1.field1写在等号的左边还是将table2.field2写在等号的左边呢?table1的这个索引在查询中是不是一定会用到呢?
wwl007 2003-12-12
  • 打赏
  • 举报
回复
靠 你都试验了 当然试验出真理了 你说了算
xzou 2003-12-12
  • 打赏
  • 举报
回复
如果table1.field1上建有索引
应该用table1.field1=to_number(table2.field2)
如果table2.field2上建有索引
应该用table2.field2=to_char(table1.field1)


glmcglmc 2003-12-12
  • 打赏
  • 举报
回复
应该是一样的,比较的意义不大

17,088

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧