我有个SQL
select * from table where column1='111' and .......其中column1字段类型是varchar2,这个语句很慢,而改成select * from table where column1=111 and ....就很快,请各位解释下这个现象是什么原因,会是因为varchar2有可能使索引失效吗

解决方案 »

  1.   

    没可能
    多Run几次, 取平均时间看看是否真的很慢
      

  2.   

    你的情况,可能是发生在使用索引上. 不知道是否有使用索引.  不管如何, 你可以把两次执行的执行计划show出来看看. 看看是全表扫描了还是使用索引了, 分别比较一下两者的执行成本.
      

  3.   

    两个语句的执行计划一样吗?去掉后面and部分还有这种现象吗?
      

  4.   

    只看cost值不一定准确。如果统计值未被更新,cost的值就有偏差。
      

  5.   

    如果把其他都去掉
    select * from table where column1='111'很快
    select * from table where column1=111很慢为什么会这样呢,是表的统计信息不准确吗,要怎么查,怎么解决
      

  6.   

    to bobfang(匆匆过客) :我对表做了个分析,然后速度一样快,然后把表索引都重建了一下,就又变成原来那个样子,用引号比不用引号慢,会不会是因为引号有时会让索引失效
      

  7.   

    如果在column1上建有普通索引,column1为varchar时,column1=111不会用索引,而column1='111'会用。但如果还有其他条件时,很难说用索引就一定比不用索引快。