远程和本地查询之间的结果不一致

时间:2010-07-09 18:45:32

标签: tsql sql-server-2008

我有一个有趣的案例,SQL Server返回的结果集会有所不同,具体取决于查询是在本地还是远程执行。

实质上,如果我执行以下查询:

SELECT p.ID AS Id 
FROM csdb.users.People AS p
LEFT JOIN csdb.users.Accounts AS a ON p.ID = a.IdentityId

然后执行左连接,然后我获得633行。但是,如果我以远程执行查询:

SELECT p.ID AS Id 
FROM quantdb.csdb.users.People AS p
LEFT JOIN quantdb.csdb.users.Accounts AS a ON p.ID = a.IdentityId

然后不执行左连接,执行People表的索引扫描,并且仅返回564条记录。本质上,似乎在远程情况下,优化器正在说'好吧,你不需要Accounts表中的任何列,所以我不会进行连接'而在另一种情况下,它说'我会做加入'。

远程和本地查询的优化器行为的差异是SQL Server的已知“功能”,还是这个错误?

我们正在使用SQL Server 2008,SP1

1 个答案:

答案 0 :(得分:1)

如果Accounts.IdentityId上存在唯一约束,则不进行连接是有效的优化,因为连接不能添加任何新行(非唯一列会导致p.ID重复每个对应的副本Accounts.IdentityId)。

您可以发布表格的确切模式,包括所有索引和约束吗?我想看看它是否有责备。