چرا قرار دادن جمله WHERE در نمای خارج عملکرد وحشتناکی دارد

بیایید بگوییم شما یک دیدگاه دارید:

CREATE VIEW dbo.v_SomeJoinedTables AS
SELECT
    a.date,
    a.Col1,
    b.Col2,
    DENSE_RANK() 
      OVER(PARTITION BY a.date, a.Col2 ORDER BY a.Col3) as Something
FROM a JOIN b on a.date = b.date

من دریافتم که عملکرد:

SELECT *
FROM v_SomeJoinedTables
WHERE date > '2011-01-01'

بسیار بدتر از

SELECT *, 
   DENSE_RANK() 
     OVER(PARTITION BY a.date, a.Col2 ORDER BY a.Col3) as Something
FROM a JOIN b ON a.date = b.date
WHERE a.date > '2011-01-01'

است. من بسیار تعجب می کنم که برنامه پرس و جو برای این دو عبارت یکسان نیست.

من همچنین از یک تابع با ارزش جدول inline استفاده کرده ام اما باز هم 100-1000 برابر طولانی تر از کدی است که من منطق مشاهده را کپی و جای گذاری می کنم.

ایده ای دارید؟

16
задан bpeikes 11 July 2011 в 17:28
поделиться