最近在改项目代码过程中发现一个很有趣的问题,用inner join关联表时,如果ON关键字后直接用[字段一]=[字段二]数据查询非常快,但是如果用on function(字段一)=function(字段二)则超级慢,为什么加了函数后性能差别就那么大了。。

解决方案 »

  1.   

    在字段上做任何操作就是全表扫描。
    逻辑上很清楚,where function(字段) = 1这样一个条件语句,sql必须先对字段执行function,才能确定等式是否成立,这样就必须扫描每一行的这个字段,执行function.
    而where 字段=1,在字段建立索引的情况下,就很快,因为索引是和字段本身的值挂钩的,而非function(字段)的值
      

  2.   

    没仔细想,以上答案和lz的问题有些不一样的地方on on function(字段一)=function(字段二)慢的原因是没用到索引扫描。
    而 on 字段一 = 字段二 就用到了。