【发布时间】:2008-10-08 09:25:38
【问题描述】:
我们有两个表:
- 文档:id、title、document_type_id、showon_id
- 文档类型:id、名称
- 关系: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
);
我们的问题是:何时以及是否使用 DISTINCT 获取较小的记录集与检索整个表和 IN 语句将表带到第一个匹配项更好。 (我们猜这就是它的作用;-))
这对于不同的数据库是否不同,有共同的答案吗?
或者有更好的方法吗? (我们在 .NET 领域)
【问题讨论】:
标签: sql-server database performance