请帮我找到以下问题的解决方案。 我有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
这种差异可能是什么原因?
答案 0 :(得分:1)
您的视图top ()
没有order by
,因此此选择的结果取决于服务器选择返回行的顺序。
由于请求的列不同,服务器在“正确”计划中选择ODRERED
索引扫描,在“错误”计划中选择NOT ORDERED
,因此两个查询会生成2个不同的计划。
结果,不同的行被进一步过滤,最终的行数不同