sql中删除查询的性能

sql中删除查询的性能,sql,sql-server,performance,tsql,Sql,Sql Server,Performance,Tsql,我有一张有200000张唱片的桌子。我想删除一些数据,如下所示: DELETE FROM Table Where IdColumn IN ( SelectedID ) 选择EDID填充包含5000条记录的我想要的数据标识。有两种方法: 1-我插入20000个标识作为SelectedID,其中包含所需5000条记录的标识 2-我只插入5000条记录的标识 问题是这两种方法的区别是什么?(性能)如果我完全理解您的意思,我不太确定,但我会选择#2,因为生成20000行(其中您只需要5000行,而不是

我有一张有200000张唱片的桌子。我想删除一些数据,如下所示:

DELETE FROM Table Where IdColumn IN ( SelectedID )
选择EDID填充包含5000条记录的我想要的数据标识。有两种方法:

1-我插入20000个标识作为SelectedID,其中包含所需5000条记录的标识

2-我只插入5000条记录的标识


问题是这两种方法的区别是什么?(性能)

如果我完全理解您的意思,我不太确定,但我会选择#2,因为生成20000行(其中您只需要5000行,而不是只插入所需的5000行)似乎是浪费资源


另外,200.000行是一个小表。真的

大型
IN
子句的性能非常糟糕,这主要是由于查询编译时造成的。因此,如果您有一个包含ID的
列表
,那么:

List<int> myIDs = GetIDs(); //20,000
var inList = myIDs.Distinct(); //5,000 distinct IDs
//pass inList to SQL

我不确定您的列表是否来自外部来源,并且不能像这样确定……但如果可以,您的删除速度将非常快。

您的意思是在方法一中,将重复15000个副本?在第一种方法中,我有15000个表中没有的标识。但我不知道这个。(在我的申请中)是的,我知道200.000行是一个小表格。这是一个样本。你可以乘到100。在我的应用程序中,我可以搜索5000条记录,但这是浪费时间的,因此我不会搜索我的数据并将所有数据标识传递给in子句。谢谢Nick。我通过返回逗号分隔的字符串在应用程序中创建所需的标识。然后将该字符串传递给删除过程,在存储过程中使用表值UDF将其拆分,并将其与要从中删除的表连接起来。@masoud ramezani-这是否达到了字符串长度限制?
List<int> inList = GetIDS(); //20,000
//pass inList to SQL
DELETE FROM Table 
Where IdColumn IN (Select ID
                   From OtherTable
                   Where Name Like '%DeleteMe%')