请问这个存储过程可以怎么优化?
IF EXISTS (SELECT name
FROM sysobjects
WHERE name = N 'add_url '
AND type = 'P ')
DROP PROCEDURE add_url
GO
CREATE PROCEDURE add_url
@url varchar(255),
@title nvarchar(255),
@body text,
@text text,
@digest char(32),
@pageId int
AS
declare @digest2 char(32)
if not exists(select * from posts where url=@url)
begin
--不存在数据, 直接插入
insert into posts values(@url,GETDATE(),@title,@pageId,@body,@digest,@text,1)
end
else
begin
select @digest2=@digest from posts where url=@url
if(@digest2=@digest)
begin
--旧数据, 直接更新重复编号
update posts set datetime=getdate(),duplicated=duplicated+1 where url=@url
end
else
begin
--新数据,重置所有数据
update posts set body=@body, text=@text, digest=@digest, pageId=@pageId, title=@title, datetime=getdate(), duplicated=1 where url=@url
end
end
GO
意思就是说, 如果插入的数据不存在(条件@url=url), 则将数据插入进去.
如果存在了, 则比较是不是新数据,
如果不是新数据(@digest2=@digest), 则更新duplicated增1,
如果是新数据, 则刷新所有列
感觉第一个not exist和后面的读digest的应该可以省略成一行, 但是不知道怎么写.
这个存储过程需要被频繁的调用, 请问还有什么可以优化的措施呢?
[解决办法]
干吗的?
[解决办法]
Up一个算数~~
[解决办法]
CREATE PROCEDURE add_url
@url varchar(255),
@title nvarchar(255),
@body text,
@text text,
@digest char(32),
@pageId int
AS
declare @digest2 char(32)
select @digest2=digest from posts where url=@url
if @digest2 is null
insert into posts values(@url,GETDATE(),@title,@pageId,@body,@digest,@text,1)
else if @digest2=@digest
update posts set datetime=getdate(),duplicated=duplicated+1 where url=@url
else
update posts set body=@body, text=@text, digest=@digest, pageId=@pageId, title=@title, datetime=getdate(), duplicated=1 where url=@url
[解决办法]
优化嘛
呵呵,楼下来
[解决办法]
似乎再优化也没必要,如果把url作成索引,因为存在平凡的更新,所以还要重整索引,一样占时间
[解决办法]
建议使用游标。。。。。
请教这个存储过程可以如何优化
请问这个存储过程可以怎么优化?IFEXISTS(SELECTnameFROMsysobjectsWHEREnameN add_urlANDtypeP )DROPPRO
