سؤال

لإجراء التحولات في قاعدة البيانات الخاصة بي ، أستخدم مجموعة مرات عرض بالسلاسل بشكل متكرر. ضمن وجهات النظر ستكون تعبيرات الجدول الشائعة. على سبيل المثال ، سيكون لدي ما يلي:

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 لنفسه ، فإن الاستعلام سوف يتباطأ بشكل كبير حيث يحاول المحسن أن يجد طريقه إلى الجداول المصدر والبحث عن فهارس من نوع ما. عادةً ما يكون هذا على ما يرام ، لكنني في بعض الأحيان أريد فقط تخزين نتيجتي المؤقتة والانضمام إلى ذلك لأنه (كونه هو الإنسان في القصة) ، أعرف أن جدول النتائج سيكون صغيرًا جدًا ، وسيكون أسرع بكثير للانضمام ضد "الجلب المسبق" منه.

هل هناك طريقة بالنسبة لي لكتابة تلميح الاستعلام ، من شأنها أن تؤثر على خطة الاستعلام بطريقة ستتم تجنبه مسبقًا ثم انضمامها؟ وإلا سأضطر إلى اللجوء إلى طاولات مؤقتة في إجراء مخزن ، لكنني أريد تجنب ذلك إذا استطعت.

شكرًا على أي اقتراحات ، أيضًا عندما تعتقد أن تصميمي تمتص :-)

هل كانت مفيدة؟

المحلول

العرض هو الماكرو الذي يتوسع: لا يوجد تخزين مؤقت أو ما قبل الحصر.

ما لم يكن لديك طرق عرض فهرسة حيث يمكنك استخدام noexpand .. ولكن هذه لن تعرض على وجهات نظر عادية.

ومع ذلك ، يمكنك استخدام أعلى/ترتيب داخلي لتحقيق العرض أيضًا:

SELECT
   *
FROM
   (SELECT TOP 2000000000 * FROm TransformationStep2 ORDER BY soemthing) V1
   JOIN
   (SELECT TOP... ) bar on foo.x = bar.x

لا يوجد شيء سحري حول وجهة نظر: إنه مجرد نص وليس له ذاكرة أو ثبات ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top