日期:2014-05-17  浏览次数:20453 次

求助优化一条sql,现在等
我想对表里的Talk_source这个字段
1. 去掉问号后面的参数
2. 去掉#号后面的参数
3. 如果最后是/结尾的,去掉这个/
4. 如果是/index.html结尾的 则去掉/index.html
5. 如果是/index_2.html或者/index_3.html结尾的,去掉这个

现在sql句子我写完了,但是执行一个3w多记录的表竟然将近要20秒,请问各位大侠 可以优化一下吗


select case when right(Talk_source5,13) like '%/index_%.html' then left(Talk_source5,LEN(Talk_source5)-13) else Talk_source5  end as Talk_source6,* from (
select case when right(Talk_source4,11)='/index.html' then left(Talk_source4,LEN(Talk_source4)-11) else Talk_source4  end as Talk_source5,*   from (
select case when RIGHT(Talk_Source3,1)='/' then LEFT(Talk_Source3,LEN(Talk_Source3)-1) else Talk_Source3 end as Talk_source4,* from (
select LEFT(Talk_source2,case when (CHARINDEX('#',Talk_source2)-1)>0 then CHARINDEX('#',Talk_source2)-1 else len(Talk_Source2) end) as  Talk_Source3,* from (
select LEFT(Talk_source,case when (CHARINDEX('?',Talk_source)-1)>0 then CHARINDEX('?',Talk_source)-1 else len(Talk_Source) end) as  Talk_Source2,*
from Zoosnet_Data where Project_ID=1 and Talk_source!=''
and (Zoosnet_Visit_Start_Time between '2012-12-01 08:39:21' and '2013-8-29 8:39:20')
 ) as aaa ) as aaa )as aaa) as aaa

------解决方案--------------------
关键词%/index_%,由于前面用到了“%”,因此该查询必然走全表扫描,除非必要,否则不要在关键词前加%,
------解决方案--------------------
用SQL正则替换: http://bbs.csdn.net/topics/380238835


正则可以用这个:  (.*)([#?/]
------解决方案--------------------
/index(_\d+)?\.html)$