2015-04-01 88 views
0

我有一個索引視圖:索引視圖可用性

CREATE VIEW ptv.vw_mokiniai_2 
WITH SCHEMABINDING 
AS 
    SELECT 
    T1.year_name, 
    T2.person_id, 
    T2.year, 
    T2.person_position, 
    COUNT_BIG(*) AS [aggregated number] 
    FROM Table1 AS T1 
    INNER JOIN Table2 AS T2 
    ON T1.year = T2.year 
    GROUP BY T1.year_name, 
    T2.person_id, 
    T2.year, 
    T2.person_position 

以獨特的聚集索引的列上

T1.year_name, T2.person_id, T2.year, T2.person_position 

我需要的查詢優化器使用該索引視圖,在查詢

SELECT 
    T1.year_name, 
    COUNT_BIG(DISTINCT T3.person_id) AS [persons_per_year] 
FROM Table1 AS T1 
INNER JOIN (
      SELECT 
       T2.person_id, 
       T2.year, 
       T2.person_position 
      FROM Table2 AS T2 
      GROUP BY T2.person_id, T2.year, T2.person_position 
      ) AS T3 
    ON T1.year = T3.year 
GROUP BY T1.year_name 

查詢必須使用派生表,因爲COGNOS生成此查詢,我不想編輯多維l型號。有人有一個想法怎麼可能做到?也許唯一的方法來優化查詢是刪除派生表(意味着我必須編輯多維模型)?任何建議(查看編輯和最終查詢編輯),將不勝感激。

+0

您是否考慮過在派生表查詢中單獨創建索引視圖? – 2015-04-01 12:04:00

+0

我試過這個..did不工作 – ramas 2015-04-01 12:20:00

+0

你正在運行企業版嗎? – 2015-04-01 12:33:40

回答

0

以下示例在我的測試中使用了索引視圖。如果這在您的環境中不起作用,那麼您發佈的代碼中可能沒有明顯區別。

CREATE TABLE dbo.Table1 
    (
     year varchar(10) 
    , year_name varchar(10) 
    ); 

CREATE TABLE dbo.Table2 
    (
     year varchar(10) 
    , person_id varchar(10) 
    , person_position varchar(10) 
    ); 
GO 

CREATE VIEW dbo.vw_mokiniai_2 
WITH SCHEMABINDING 
AS 
    SELECT T2.person_id 
      , T2.year 
      , T2.person_position 
      , COUNT_BIG(*) AS [aggregated number] 
    FROM dbo.Table2 AS T2 
    GROUP BY T2.person_id 
      , T2.year 
      , T2.person_position 
GO 
CREATE UNIQUE CLUSTERED INDEX cdx ON vw_mokiniai_2(year, person_id, person_position) 
GO 

SELECT 
    T1.year_name, 
    COUNT_BIG(DISTINCT T3.person_id) AS [persons_per_year] 
FROM Table1 AS T1 
INNER JOIN (
      SELECT 
       T2.person_id, 
       T2.year, 
       T2.person_position 
      FROM Table2 AS T2 
      GROUP BY T2.person_id, T2.year, T2.person_position 
      ) AS T3 
    ON T1.year = T3.year 
GROUP BY T1.year_name 
GO 
+0

是的,我嘗試創建可用的索引視圖時犯了一個錯誤。它的工作,謝謝。 – ramas 2015-04-01 13:34:50