在SQL中,使用DISTINCT如何影响性能?

在SQL中,使用DISTINCT如何影响性能?,sql,ms-access,performance,Sql,Ms Access,Performance,我试图选择一个不同的列表,其中在多个字段上创建重复项。比如说, SELECT tablename.field1Date, tablename.field2Number, tablename.field3Text FROM tablename; 将分别在日期、编号和文本字段上选择复制记录 现在,当我选择不同的记录来提供我要查找的内容时,性能似乎急剧下降 SELECT DISTINCT tablename.field1Date, t

我试图选择一个不同的列表,其中在多个字段上创建重复项。比如说,

SELECT tablename.field1Date, 
       tablename.field2Number, 
       tablename.field3Text 
FROM tablename;
将分别在日期、编号和文本字段上选择复制记录

现在,当我选择不同的记录来提供我要查找的内容时,性能似乎急剧下降

SELECT DISTINCT tablename.field1Date,
                tablename.field2Number, 
                tablename.field3Text 
FROM tablename;

有什么已知的原因吗?我必须承认,我使用的是MS Access 2003,这可能就是问题所在

是的,基本上它必须对结果进行排序,然后重新处理以消除重复项。这种筛选也可以在排序过程中进行,但我们只能推测代码在后台是如何工作的。您可以尝试通过创建由所有三(3)个字段组成的索引来提高性能。

是的,应用程序需要在运行时将每个记录与“不同”记录缓存进行比较。您可以通过使用索引来提高性能,尤其是在数字和日期字段上。

此页面提供了有关提高查询性能的提示,以及有关使用性能分析器的一些信息。它将告诉您如果需要任何索引该怎么办


您描述的操作是O(n²)。因此,CodeSlave的答案更有可能是正确的,因为排序只需要O(n log n),从排序列表中消除重复项是O(n)。您认为所有三个字段上的复合索引和每个字段上的单独索引之间有性能差异吗?我希望会有一些改进。否则,复合索引的唯一用途将是确保唯一性,而不是帮助搜索n元组。