SQL Server 2005性能:WHERE IN语句中的不同或完整表

Ben*_*Ben 2 database sql-server performance

我们有两个表:

  • 文档:id,title,document_type_id,showon_id
  • DocumentType:id,name
  • 关系:DocumentType有很多文档.(Document.document_type_id = DocumentType.id)

我们希望检索给定ShowOn_Id的所有文档类型的列表.

我们看到两种可能性:

SELECT DocumentType.*
FROM DocumentType
WHERE DocumentType.id IN (
    SELECT DISTINCT Document.document_type_id FROM Document WHERE showon_id = 42
);

SELECT DocumentType.*
FROM DocumentType
WHERE DocumentType.id IN (
    SELECT Document.document_type_id FROM Document WHERE showon_id = 42
);
Run Code Online (Sandbox Code Playgroud)

我们的问题是:何时以及是否更好地使用DISTINCT获取较小的记录集而不是检索整个表和IN语句将表格移动到第一个匹配.(我们猜这就是它的作用;-))

对于不同的数据库,这是不同的,有一个共同的答案吗?

或者有更好的方法吗?(我们在.NET领域)

小智 11

您可以使用联接:

SELECT DISTINCT DocumentType.*
FROM DocumentType
INNER JOIN Document
ON DocumentType.id=Document.document_type_id
WHERE Document.showon_id = 42
Run Code Online (Sandbox Code Playgroud)

我认为这是最好的方法.