日期:2014-05-16  浏览次数:20498 次

sql server优化问题
语句中有一条:
convert(CHAR(15), v1.finterid) + convert(CHAR(15), u1.fentryid) 
NOT IN
 (SELECT convert(CHAR(15), fdinterid) + convert(CHAR(15), fdentryid) FROM icclientver)
做了函数计算,用不到索引,导致整个语句执行很慢
语句是应用内置的,无法修改,sql server又没有函数索引,求助要如何优化?
------解决方案--------------------
从代码来看,not in/not exists恐怕不是root cause,而是convert的拼接和转换,如果你的查询总是char(15),可以考虑用计算列预存convert之后的值,然后not exists
------解决方案--------------------
可以把语句改成 LEFT JOIN ,在where做为空的筛选。例如

select  v1.*   from table v1left join icclientver v2 on  v1.finterid =  v2.finterid  and  v1.fentryid = v2.fentryid
where v2.finterid   is null