MS SQL查询结果因列集而异

时间:2017-09-21 05:56:13

标签: sql-server sql-server-2016

请帮我找到以下问题的解决方案。 我有2个问题:

SELECT tu
FROM testview1
WHERE tu = 1;
SELECT *
FROM testview1
WHERE tu = 1;

第一个查询返回21行,第二个 - 36。 testview1是一个包含3个列的视图,它们都是int。

CREATE VIEW testview1 AS
  SELECT
    rn,
    tu,
    id
  FROM t1
  UNION ALL
  SELECT
    rn,
    tu,
    id
  FROM t2

这种差异可能是什么原因?

1 个答案:

答案 0 :(得分:1)

您的视图top ()没有order by,因此此选择的结果取决于服务器选择返回行的顺序。

由于请求的列不同,服务器在“正确”计划中选择ODRERED索引扫描,在“错误”计划中选择NOT ORDERED,因此两个查询会生成2个不同的计划。

结果,不同的行被进一步过滤,最终的行数不同