-1

我有一个非常简单的查询,我在 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。

提前致谢。

4

1 回答 1

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 100 是 ADW 和 definitley 上的最低设置,不适合性能测试。尝试将 DWU 提高到例如 400 或 1000。对于 MPP 系统的这种带有少量行的简单查询,任何更多可能都过大了。请记住,较高的 DWU 价格昂贵。

NBNOLOCK不是必需的,因为READ UNCOMMITTED它是 ADW 中的默认隔离级别。

于 2017-08-16T11:32:45.993 回答