【发布时间】:2012-10-30 18:04:25
【问题描述】:
我有一个比较简单的问题。
我有数据集 A 和数据集 B,两者结构相同。
最终的结果将是数据集 A 和数据集 B 的联合,我们称之为数据集 C。
但在最终版本之前,需要通过加入数据集 X 来过滤最终数据集。
问题是我应该在数据集 X 上加入数据集 A,在数据集 X 上加入数据集 B,然后将所有 A 和 B 合并,还是应该将所有 A 和 B 合并到 C 中,然后在 X 上加入 C。
什么是更快、更节省内存等?
提前致谢!
【问题讨论】:
-
你是不是刚试过,比较了SSMS中的执行时间和查询计划?
-
为什么您认为这里的任何人都比您更适合告诉您,对于您的查询、针对您的数据、在您的硬件上,哪个更有效?
-
重点不是在此特定查询中对于此特定服务器上的此特定数据集更有效的方法,我是在询问就 sql 处理方式而言,对于大型数据集而言,一个订单是否更有效代码。如果没有通用的答案,并且在使用类似大小的数据集时,它会根据具体情况而变慢或变快,而不是 sql server 的编码方式有问题。
-
If there is no universal answer...than (sic) there is something wrong with the way sql server is coded我认为您对数据库系统的理解有问题。或者特别是 SQL Server。 -
如果 X 是一个特殊事件表,对 A 和 B 有良好的索引(大表),并且具有良好的统计信息,SQL Server 将首先执行 JOIN 即使你表达了UNION ALL 在派生表中。如果您有两个具有良好交集的小表 A 和 B,以及一个较大的 X 表,则 UNION/SORT 将在 JOIN 之前发生,再次给出良好的统计信息。除了这些极端情况,任何事情都会发生。
标签: sql sql-server