在阅读了这篇关于中间物化的有趣文章之后——我还有一些问题。
我有这个查询:
SELECT *
FROM ...
WHERE isnumeric(MyCol)=1 and ( CAST( MyCol AS int)>1)
但是,where 子句的顺序不是确定性的。
所以我可能会在这里遇到异常。(如果他第一次尝试投射"k1k1"
)
我认为这将解决问题
SELECT MyCol
FROM
(SELECT TOP 100 PERCENT foo From MyTable WHERE ISNUMERIC (MyCol ) > 1 ORDER BY MyCol ) bar
WHERE
CAST(MyCol AS int) > 100
- 为什么 put
top 100 + order
会改变我的常规查询?
我在评论中读到:
(“中间”结果 - 换句话说,在此过程中获得的结果,将用于计算最终结果)将物理存储(“物化”)在 TempDB 中,并从那里用于其余用户,而不是从基表中查询回来。
- 如果它存储在 tempDB 中或从基表中查询回来有什么区别?这是相同的数据!