2015-10-19 58 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