sql 执行效率

shenhui_163 2010-10-14 12:14:37
我有如下两个存储过程
ALTER PROCEDURE [dbo].[P_EmailLog_Clear]
AS
DECLARE @Emails VARCHAR(8000)
SET @Emails = ''
SELECT @Emails = @Emails + email + ','
FROM PUB_MailSendLog ,PUB_MailTypeConfig
WHERE PUB_MailSendLog.mailConfigID = PUB_MailTypeConfig.mailConfigID
AND DATEADD("M",PUB_MailTypeConfig.validateMonth,PUB_MailSendLog.sendTime) < getdate()

/* 声明循环次数 */
DECLARE @Count INT
SET @Count = 0
SELECT @Count = LEN(@Emails) - LEN(REPLACE(@Emails,',',''))
/* 声明循环变量 */
DECLARE @i INT
SET @i = 0
/* 声明零时变量 */
DECLARE @tempEmail NVARCHAR(100)
SET @tempEmail = ''
--PRINT @Emails
--PRINT @Count

IF (LEN(@Emails) > 0)
BEGIN
WHILE(@i < @Count)
BEGIN
-- PRINT('执行')
SELECT @tempEmail = SUBSTRING(@Emails ,0 ,PATINDEX ('%,%' , @Emails))
DELETE FROM PUB_MailSendLog WHERE email = @tempEmail
SELECT @Emails = SUBSTRING(@Emails ,PATINDEX('%,%' , @Emails) + 1 ,LEN(@Emails))
SET @i = @i + 1
END
END

ALTER PROCEDURE [dbo].[P_EmailLog_Clear]
AS
DELETE FROM PUB_MailSendLog WHERE logGUID IN
(
SELECT t1.logGUID FROM PUB_MailSendLog t1,PUB_MailTypeConfig t2
WHERE t1.mailConfigID = t2.mailConfigID
AND DATEADD(MONTH ,t2.validateMonth ,t1.sendTime) < GETDATE()
)

也就是循环删除一个是逐行删除.另外一个是用 IN 删除
请问那个效率高一些

...全文
91 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
黄_瓜 2010-10-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sqlcenter 的回复:]
引用 3 楼 shenhui_163 的回复:

忘记说了
in 里面比较的数据为 GUID


这个没什么疑问的,没人会用第一种方法来删除数据,@Emails合成又拆分,好玩么
[/Quote]好玩么
?

第二个好
Chenzhifu 2010-10-15
  • 打赏
  • 举报
回复
类似效率的问题,建议lz在删除的前后加一个时间,看下哪个消耗的时间多.数据太少多模拟几次执行作为比较,要看地明确,可以把数据增多n倍,试下就知道了,别人说的都不算.
有的时候并非批量处理就快,主要还是要看你SQL语句怎么写!!!!
SQLCenter 2010-10-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 shenhui_163 的回复:]

忘记说了
in 里面比较的数据为 GUID
[/Quote]

这个没什么疑问的,没人会用第一种方法来删除数据,@Emails合成又拆分,好玩么
shenhui_163 2010-10-14
  • 打赏
  • 举报
回复
忘记说了
in 里面比较的数据为 GUID
SQLCenter 2010-10-14
  • 打赏
  • 举报
回复
几条数据差别不明显,大量数据差别很大。
SQLCenter 2010-10-14
  • 打赏
  • 举报
回复
当然是批量删除(in)

22,301

社区成员

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

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