急!!!!存储过程高手请进,如何优化下面这个存储过程?

vbvc 2007-03-26 09:44:41
这个存储过程主要用来记录个人blog的访问情况的。

这个存储过程是否还可以优化?目前执行起来非常耗cpu,执行时间也很长,100万条记录左右,cpu就开始100%了。

请高手指点了!!!


CREATE Proc blog_InsertVisiting
(
@Visitor nvarchar(50),
@IP nvarchar(20),
@BlogID int

)
as


if exists(select top 1 vid from blog_Visiting with(nolock)
where blogID=@blogID and Visitor=@Visitor and ip=@ip
and convert(varchar(10),dateadded,121)=convert(varchar(10),getdate(),121))
begin

--如果不是匿名访客,更新访问时间
if Lower(@Visitor) !='guest'
begin
update a set a.DateAdded=getdate() from blog_Visiting a with(rowlock)
where blogID=@blogID and Visitor=@Visitor and ip=@ip
and convert(varchar(10),dateadded,121)=convert(varchar(10),getdate(),121)
end

end
else
begin

Insert blog_Visiting(IP,Visitor, BlogID, DateAdded)
Values(@IP,@Visitor, @BlogID, getdate())

--更新访问量
update blog_Stats with(rowlock) set VisitCount=isnull(VisitCount,0)+1 where blogID=@blogID

end
...全文
251 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
vbvc 2007-03-29
  • 打赏
  • 举报
回复
问题已经解决
谢谢 paoluo(一天到晚游泳的鱼)
paoluo 2007-03-29
  • 打赏
  • 举报
回复
业务逻辑跟我们的有所差异?能指出哪裡嗎?

基本就是按照你上面語句的意思修改的。
vbvc 2007-03-29
  • 打赏
  • 举报
回复
paoluo(一天到晚游泳的鱼)

你的是可以的
但是性能没有什么特别的改进
而且业务逻辑跟我们的有所差异
vbvc 2007-03-28
  • 打赏
  • 举报
回复
to:一天到晚游泳的鱼)

刚出差了几天
还来不及测试
今天测试后告诉你
谢谢啊
paoluo 2007-03-26
  • 打赏
  • 举报
回复
?

我寫的那個測試了沒有?能用不?
vbvc 2007-03-26
  • 打赏
  • 举报
回复
请高手继续补充。。。。
biao1 2007-03-26
  • 打赏
  • 举报
回复
学习
vbvc 2007-03-26
  • 打赏
  • 举报
回复
to: paoluo(一天到晚游泳的鱼)

是这样的,我们统计的访问量,其实是每天的独立IP。
paoluo 2007-03-26
  • 打赏
  • 举报
回复
另外,發現個問題.

如果表中存在數據的話,沒有更新訪問量,不存在數據的話,才更新訪問量.

好象一般都是不管是否存在數據都應該在訪問量上加1吧。

paoluo 2007-03-26
  • 打赏
  • 举报
回复
這樣試試呢?

CREATE Proc blog_InsertVisiting
(
@Visitor nvarchar(50),
@IP nvarchar(20),
@BlogID int

)
as

update a set a.DateAdded=getdate() from blog_Visiting a with(rowlock)
where blogID=@blogID and Visitor=@Visitor and ip=@ip
and datediff(dd, dateadded, getdate()) =0 and Lower(@Visitor) !='guest'

Insert blog_Visiting(IP,Visitor, BlogID, DateAdded, VisitCount)
Select @IP,@Visitor, @BlogID, getdate(), 1
Where Not exists(select top 1 vid from blog_Visiting with(nolock)
where blogID=@blogID and Visitor=@Visitor and ip=@ip
and datediff(dd, dateadded, getdate()) = 0)
GO
vbvc 2007-03-26
  • 打赏
  • 举报
回复
请高手指点啊
vbvc 2007-03-26
  • 打赏
  • 举报
回复
但是执行起来怎么那么耗资源呢
跟踪了一下,这个是目前是数据库所有存储过程中最耗cpu的
jacobsan 2007-03-26
  • 打赏
  • 举报
回复
从语句上看。。貌似没什么好优化的。。

27,581

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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