或者去掉where条件也很快。很郁闷啊,各位大虾帮忙啊。

解决方案 »

  1.   

    %'lyly'% 这样无法用到索引,会做全表扫描
      

  2.   

    是不是trim和%%一块用的话会很慢呢?
      

  3.   

    select a.id,a.name,b.no from a left outer join b on trim(a.name)=trim(b.name) where  instr(b.name ,'lyly',1)>0  会否快些!
      

  4.   

    搂上的用instr()效率要慢了多了哦!!
      

  5.   

    临时的解决办法就是建立函数索引
    觉得真正解决的方式是把数据库中char类型的字符串除了必要的其他都转换成varchar2类型的字符串,避免在存入数据的时候存入太多的空格
      

  6.   

    数据库中用的就是varchar2类型的呀。
      

  7.   

    select a.id,a.name,b.no from a left outer join b on trim(a.name)=trim(b.name) where b.name like %'lyly'%先确定trim(a.name)=trim(b.name),where b.name like %'lyly'%到底哪个耗资源,先去掉一个试试
    如果是trim,建议你在insert时,就使用trim;
      

  8.   

    不妨试试这样:
    select a.id,a.name,b.no from a left outer join b on rtrim(ltrim(a.name))=rtrim(ltrim(b.name)) where b.name like %'lyly'%
      

  9.   

    先对trim 建立函数索引,CBO(或者choose)方式下函数索引才会起作用,如果是基于RBO的可能不起作用
    create index func_index_test1 on a( trim(name) )
    create index func_index_test2 on b( trim(name) )
      

  10.   

    呵呵,%%可以转换成instr()啊,然后再建立一个instr()的函数索引就可以了
    create index func_index_test3 on b( instr(name,'lyly',1) )
      

  11.   

    插入时 在页面或后台就做trim处理
      

  12.   

    如果已经是varchar 的 就先做 trim 处理
    同时 like'lyly%'  是可以用到索引的 
    但是 like  '%lyly%' 是要全表扫描的
      

  13.   

    是Trim的问题吧,从数据库里读取数据的时候,获得的数据通常会包含空格和ASII码为0的字符char(0),Trim()只能截去字符串两边的空格,所以会比较慢一些吧,可以写一个TrimStr()函数增加去除char(0)的功能
    Public Function TrimStr(ByVal Str As String)As String  If InStr(STr,Char(0))<=0 Then      TrimStr=Trim(Str)
      Else      TrimStr=Trim(Left(Str,InStr(Str,Char(0))-1))
      End If
    End Function