2015-10-19 57 views
0

我有以下視圖,它在Azure上運行時存在嚴重的性能問題。如果我在本地複製Azure數據庫並在視圖上運行任何查詢,它會在幾秒鐘內返回。對視圖的同一查詢在Azure上超時。Azure上的SQL遞歸CTE超時

爲什麼針對視圖的查詢會在Azure上超時?

  CREATE VIEW [dbo].[JobTypeDescendantJobTypes] 
      AS 
      WITH cte (ParentJobTypeId, Id) 
         AS (SELECT Id , 
            Id 
          FROM  dbo.JobTypes 
          UNION ALL 
          SELECT e.Id , 
            cte.Id 
          FROM  cte 
            INNER JOIN dbo.JobTypes AS e ON e.ParentJobTypeId = cte.ParentJobTypeId 
         ) 
      SELECT ISNULL(Id, 0) AS ParentJobTypeId, 
        ISNULL(ParentJobTypeId, 0) AS Id 
      FROM cte 
+1

什麼是自加盟的意義呢? –

+0

@MitchWheat謝謝。我該如何去做呢?你看到代碼顯然有什麼問題嗎? – Burt

+0

它用於父母的子女關係 – Burt

回答

1

重建您的統計/索引。要做到這一點

的一種方法是:(*注意:在生產運行慎用)

DECLARE @table nvarchar(255) 
DECLARE tablecursor CURSOR FOR 
SELECT table_name FROM information_schema.tables WHERE table_type = 'base table' 

OPEN tablecursor 
FETCH NEXT FROM tablecursor INTO @table 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    exec('ALTER INDEX ALL ON ' + @table + ' REBUILD') 
    FETCH NEXT FROM tablecursor INTO @table 
END 

CLOSE tablecursor 
DEALLOCATE tablecursor 
+1

重建索引沒有幫助,還有什麼你可以想到的? – Burt