【发布时间】:2012-02-02 22:36:27
【问题描述】:
我正在运行一个存储过程来从两个表中删除数据:
delete from TESTING_testresults
from TESTING_testresults
inner join TESTING_QuickLabDump
on TESTING_QuickLabDump.quicklabdumpid = TESTING_TestResults.quicklabdumpid
where TESTING_quicklabdump.[Specimen ID]=@specimen
delete from TESTING_QuickLabDump
from TESTING_Quicklabdump
where [specimen id]=@specimen
一个表是 60m 行,另一个是大约 2m 行
该过程大约需要 3 秒才能运行。
有什么办法可以加快速度吗?也许使用EXISTS?
意思是IF EXISTS...THEN DELETE - 因为删除不应该每次都发生
类似的东西
如果 @specimen exists 在 TESTING_QuickLabDump 中,则执行两个删除的过程
谢谢!!!
【问题讨论】:
-
您确定是查询(查找要删除的行)还是实际删除行最耗时?
-
如果索引或其他调整工作没有帮助并且这是一个真正的问题,您可能需要研究表分区,这将允许您在没有开销的情况下执行删除。
-
也许我在字里行间读到这里,但您是否要逐行删除数据?如果是这样,请尝试基于集合的方法。也就是说,创建一个临时表,其中包含要删除和加入的所有 SpeciminID。
-
设置结果以文本形式显示,
SET SHOWPLAN_ALL ON然后GO然后运行您的查询然后GO然后SET SHOWPLAN_ALL OFF。请在此处发布结果。
标签: sql sql-server performance sql-server-2008