SELECT * FROM A WHERE ID = '872918229' 查询用了0.031秒
 
 SELECT * FROM A WHERE ID = 872918229  查询用了40秒
ID VARCHAR2(50)两者查询效率为什么差这么多

解决方案 »

  1.   

    一般的id字段 都是number类型 然后设置主键 正对这字段的查询效率快很多
      

  2.   

    执行计划开起来看一下就知道啦
    这里肯定是存在隐式转换!执行计划里的Predicate  Information会告诉你什么转成了啥了
      

  3.   

    SELECT * FROM A WHERE ID = 872918229
    --与这个效果差不多吧
    SELECT * FROM A WHERE to_number(ID) = 872918229
    id是字符串类型,与数字类型进行比较。oracle默认将id先转化为数字型,再进行比较,这样会变慢。另外如果id上有索引,也会失效。
      

  4.   

    因为int转换成varchar2也是需要一定时间的,SELECT * FROM A WHERE ID = '872918229' 等价于SELECT * FROM A WHERE ID = to_char(872918229)