我有几个表,里面的数据都是比较多的,里面有一对相对应的字段
我用了以下的查询语句后,发现好慢,不知道有没有好的解决方法呢:
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'%
我靠,查一条语句用了150秒。客户怎么可能接受呢!如果没有用trim的话,他只要1秒多就查出来了。
...全文
71220打赏收藏
关于去空格trim的优化
我有几个表,里面的数据都是比较多的,里面有一对相对应的字段 我用了以下的查询语句后,发现好慢,不知道有没有好的解决方法呢: 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'% 我靠,查一条语句用了150秒。客户怎么可能接受呢!如果没有用trim的话,他只要1秒多就查出来了。
是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
先对trim 建立函数索引,CBO(或者choose)方式下函数索引才会起作用,如果是基于RBO的可能不起作用
create index func_index_test1 on a( trim(name) )
create index func_index_test2 on b( trim(name) )