一个存储过程几个月还没搞定,求SQL高手 SQL Server 2008 R2数据库,有个存储过程,隔断时间就会查询超时,但是在慢的时候时候,在SQL Server Managment Studio里面直接调用是很快的,就是通过程序调用比较慢,.net程序,使用SqlHelper访问,查询返回DataSet, 每次解决都是通过将那个存储过程重新编译,查询速度立刻就快了很多,涉及表的数据量在几十万左右,索引都有建立。 还有个问题就是,这个存储过程有个参数,在慢的状态下,传0过去还是很快的,唯独传1过去查询很慢。 小弟对SQL优化也是略知一二,看了重新编译之前和之后的查询计划,是一样的,实在想不出问题出在哪里,出来SQL Server 板块,请坛子里高手指点。 ------解决思路---------------------- 可能受数据分布的影响,你可以考虑
ALTER PROC NAME WITH RECOMPILE
这样是使每次都重新编译 ------解决思路---------------------- 如果在SSMS,传入1,执行速度还是很快,那就很可能是.net和SQL之间的带宽不够 可以把SQL大致代码贴出来,帮你分析看看 ------解决思路---------------------- 楼主,你的 case 语句太奇葩了,完全不需要嵌套使用的, 一个就可以带多个 when 和 then, 头晕了 ------解决思路---------------------- (M.OrderType=@OrderType or (@OrderType=0 and M.OrderType=2))
这句相当于: @OrderType=0: =>M.OrderType=0 or (0=0 and M.OrderType=2) =>M.OrderType=0 or M.OrderType=2
@OrderType=1: =>M.OrderType=1 or (1=0 and M.OrderType=1) => M.OrderType=1 or 0 => M.OrderType=1
@OrderType=2: =>M.OrderType=2 or (2=0 and M.OrderType=2) => M.OrderType=2 or 0 => M.OrderType=2
所以可以简化 ------解决思路----------------------
让这个存储过程在每次运行时,自动编译:
create procedure dbo.xxxx with recompile ....... ------解决思路----------------------