Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server系统如何检查重复项?_Sql_Sql Server - Fatal编程技术网

SQL Server系统如何检查重复项?

SQL Server系统如何检查重复项?,sql,sql-server,Sql,Sql Server,我肯定知道如何使用SQL Server查询检查重复项/删除重复项。但我要问的是一个关于这个系统的更深层次的问题 系统如何处理重复项?例如,系统如何从UNION ALL到UNION删除重复项?我在猜测系统是否使用哈希代码来执行此操作 雇主说这个过程与ROWID有关。但即使两行完全相同,它们的ROWID也应该不同,对吗?这是怎么可能的?SQL Server目前的做法(毕竟,这是一个您不必担心的实现细节)是它将临时对输出行进行排序。它选择什么样的排序并不重要,只要它选择一个1 然后它迭代这些排序的输出

我肯定知道如何使用SQL Server查询检查重复项/删除重复项。但我要问的是一个关于这个系统的更深层次的问题

系统如何处理重复项?例如,系统如何从
UNION ALL
UNION
删除重复项?我在猜测系统是否使用哈希代码来执行此操作

雇主说这个过程与ROWID有关。但即使两行完全相同,它们的
ROWID
也应该不同,对吗?这是怎么可能的?

SQL Server目前的做法(毕竟,这是一个您不必担心的实现细节)是它将临时对输出行进行排序。它选择什么样的排序并不重要,只要它选择一个1

然后它迭代这些排序的输出行,记住它发出的最后一行。如果当前行在所有列中与最后发出的行相等,则不会发出该行本身

由于没有定义它将选择什么样的排序顺序,也没有定义它是否会应用其他技巧(例如将结果数据划分到一些列中,然后对每个分区进行独立/并行排序),因此不应该假设输出将被排序,除非您还应用了特定的
order BY
子句

SQL Server中没有
ROWID



1但是,它需要基于所有列。基本上,我们的工作是让重复的行变成连续的行。

这是我在一次访谈中被问到的问题查询执行计划将告诉你一个故事:在sql server上工作了30年,这不是一个从未出现过的问题。我会说这是一个愚蠢的面试问题。我想有人想证明他们有多聪明。和罗维德没有任何关系。UNION将在指定的列上具有唯一的结果集,如果包含ROWID,则UNION和UNION ALL将是相同的结果,因为ROWID是唯一的,有时进行排序,有时进行散列。这取决于它认为哪个更快和/或排序是否可以在查询中的其他位置重复使用。当您说SQL Server中没有RowID时,索引如何?它们与SQL Server中的RowID高度相关。