Azure SQL数据仓库中运行缓慢的查询

时间:2017-08-16 07:37:47

标签: sql azure azure-sql-database sql-data-warehouse

我有一个非常简单的查询,我在Azure SQL数据仓库中运行,但它需要大约40秒才能执行。

表格定义:

CREATE TABLE dbo.orders 
  ( 
     location_code     VARCHAR(8) NOT NULL, 
     order_date        DATETIME NOT NULL, 
     order_status_code INT NOT NULL, 
     order_type_code   VARCHAR(1) NULL, 
     coupon_code       VARCHAR(8) NULL, 
     coupon_amount     MONEY NOT NULL, 
     subtotal          MONEY NOT NULL, 
     total_amount      MONEY NULL, 
     order_number      INT NOT NULL, 
     customer_code     INT NOT NULL 
  )
 WITH
 (
    DISTRIBUTION = ROUND_ROBIN,
    CLUSTERED COLUMNSTORE INDEX
)

查询是:

SELECT location_code, 
       order_date, 
       order_status_code, 
       order_type_code, 
       coupon_code, 
       coupon_amount, 
       subtotal, 
       total_amount, 
       order_number, 
       customer_code 
FROM   orders WITH (nolock) 
WHERE  order_date >= '2016-04-01' 
       AND order_date <= '2016-04-30' 
       AND order_status_code < 99 

表中有13,083,667条记录。有人可以帮我优化这个。我为此提供了100 DWU。

提前感谢。

1 个答案:

答案 0 :(得分:0)

当您使用Azure SQL数据仓库(ADW)时,您必须采取一些措施才能从这个极其强大的MPP产品中获得良好的性能:

1.创建统计数据

在ADW中不会自动创建统计信息,因此您必须创建它们。至少,在连接中使用的所有列上创建它们,WHERE子句,GROUP BY和HAVING。查询的示例统计信息:

CREATE STATISTICS stat_dbo__orders__order_date ON dbo.orders ( order_date );
CREATE STATISTICS stat_dbo__orders__order_status_code ON dbo.orders ( order_status_code );

关于这个主题的文章:

管理SQL数据仓库中表的统计信息

https://docs.microsoft.com/en-us/azure/sql-data-warehouse/sql-data-warehouse-tables-statistics

2. DWU

DWU 100是ADW上的最低设置,definitley不适合性能测试。尝试将DWU提升到例如400或1000.对于MPP系统的行数较少的简单查询,任何更多可能都是过度的。请记住,较高的DWU价格昂贵。

不需要NB NOLOCK,因为READ UNCOMMITTED是ADW中的默认隔离级别。