有个存储过程,在sql2005执行比sql2000上慢好多

Kimi_TT 2018-08-08 11:05:10
最近数据库想升级到sql server2005,把数据库还原到sql2005上之后,有个存储过程原来在2000上只要10s左右执行完,在2005要110s执行完成,这个是什么问题啊?sql2005效率这么低吗?
...全文
276 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_41664753 2018-08-14
  • 打赏
  • 举报
回复
根据经验,还原到新数据库后得重新一下SQL服务,收缩一下文件、日志,另外重建索引;
shinger126 2018-08-09
  • 打赏
  • 举报
回复
还原数据库后,手工更新一下统计信息,否则别说版本不同了,版本相同的都会给你跑出完全不同的执行计划来
Kimi_TT 2018-08-08
  • 打赏
  • 举报
回复
努力了一下,改成这样子了,好很多
select fcurraddr,left(fcurraddr,charindex('@',fcurraddr)),* from dbo.TPATIENTVISIT 
where FCYDATE>='20180701'
and not exists(select 1 from tstandardmx where fcode='Gbaddr' and (fbh=left(fcurraddr,9)) and (fmc=substring(fcurraddr,10,charindex('@',fcurraddr)-9)))
Kimi_TT 2018-08-08
  • 打赏
  • 举报
回复
select fcurraddr,left(fcurraddr,charindex('@',fcurraddr)),* from dbo.TPATIENTVISIT 
where FCYDATE>='20180701'
and (left(fcurraddr,charindex('@',fcurraddr)) not in (select fbh+fmc from tstandardmx where fcode='Gbaddr'))


看了一下,是这条语句的问题,在sql2000上执行很快(1s),在sql2005上执行超慢(2min)
吉普赛的歌 2018-08-08
  • 打赏
  • 举报
回复


在 SQL Server 2005 存储过程的 AS 上方加一行:
WITH RECOMPILE 


再试。
sywcf 2018-08-08
  • 打赏
  • 举报
回复
1.将in 改为 exists
2.将varchar改为nvarchar
3.尽量减少嵌套,特别是嵌套语句中,还多个表关联的,把它们提前存入临时表
4.适当的索引
sywcf 2018-08-08
  • 打赏
  • 举报
回复
本来在sqlserver2000里运行的好好的,到2005或2008里就会变慢,这种情况我遇到过几次,一般都如下几个方面查找:1.
二月十六 2018-08-08
  • 打赏
  • 举报
回复
SELECT
fcurraddr,
LEFT(fcurraddr, CHARINDEX('@', fcurraddr)),
*
FROM
dbo.TPATIENTVISIT
WHERE
FCYDATE >= '20180701'
AND NOT EXISTS
(
SELECT
1
FROM
tstandardmx
WHERE
fcode = 'Gbaddr'
AND LEFT(fcurraddr, CHARINDEX('@', fcurraddr) = fbh + fmc
);
卖水果的net 2018-08-08
  • 打赏
  • 举报
回复
1、把统计信息更新一下。
2、and not exists(select 1 from tstandardmx where fcode='Gbaddr' and (fbh=left(fcurraddr,9)) and (fmc=substring(fcurraddr,10,charindex('@',fcurraddr)-9)))

调整 fbh=left(fcurraddr,9) 这两个条件,看看能不能换成 like 形式。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧