要在我的数据库中执行转换,我经常使用链接的一组视图。在视图内将是通用表格表达式。例如,我会具备以下条件:SQL Server 2008:与其他VIEW一起加入VIEW:预计算而不诉诸临时表
CREATE VIEW TransformationStep1 AS
WITH Transformation1A AS (
SELECT Field1, Field2, Field3, Bla(Field1) AS Calc FROM Table1
),
Transformation1B AS (
SELECT Field1, Field2, Field3, Calc FROM Transformation1A
)
SELECT * FROM Transformation1B
CREATE VIEW TransformationStep2 AS
WITH Transformation2A AS (
SELECT Field1, Calc FROM TransformationStep1
), ....
某处TransformationStep4附近的查询计划变得更加复杂的看法会越来越慢。这是预料之中,并确定。
但是,当我想将TransformationStep4的一部分加入到它本身时,查询将会非常缓慢,因为优化器会尝试一路找回源表并查找某种类型的索引。通常情况下,这是可以的,但有时候我只是想存储我的临时结果并加入,因为(作为故事中的设计人员)我知道结果表格会很小,加入会更快反对它的“预取”。
有没有办法让我写一个查询提示,这将影响查询计划的方式,使得子查询将被预取,然后加入?否则,我将不得不在存储过程中使用临时表,但如果可以的话,我想避免它。
感谢您的任何建议,也当你觉得我的设计很烂:-)
TOP作品!太棒了,现在我可以用它来实现我的通用表格表达式。 (我没有认为视图是神奇的,我只是希望能够操纵查询优化器不会递归到我的CTE中。) – thomaspaulb 2010-10-11 18:30:20