sql 执行效率

shenhui_163 shenhui_163 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我有如下两个存储过程
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 删除
请问那个效率高一些

...全文
评论 6
收藏 已收藏
分享
返回顶部
shenhui_163
疑难问题 22,298 成员 121,727 内容