【问题标题】:Query for data slow after creating a CLUSTERED INDEX partition [Azure]创建 CLUSTERED INDEX 分区后查询数据缓慢 [Azure]
【发布时间】:2019-08-06 02:31:43
【问题描述】:

在 Azure SQL Server 上,我为包含 700 万行的表创建了一个 CLUSTERED INDEX 分区。然后我的网站需要 10 多秒才能加载数据。

但如果我不创建 CLUSTERED INDEX 分区,我的网站需要大约 6 秒来加载数据。如果我使用在 SQL Server Enterprise 上创建 CLUSTERED INDEX 分区的同一数据库并将其放在位于 LAN 中的服务器上,我的网站大约需要 3 秒来加载所有数据。

用于创建聚集索引的我的 sql 查询:

CREATE PARTITION FUNCTION PARTITION_MYDATA (CHAR(4)) AS RANGE RIGHT FOR VALUES
    ('1000','1001',...,'5000');
CREATE PARTITION SCHEME SCHEME_MYDATA AS PARTITION PARTITION_MYDATA ALL TO
    ([PRIMARY]);
CREATE CLUSTERED INDEX IX_MyData_partitioncol ON dbo.MyData(ClassificationCode)
    WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
    ON SCHEME_MYDATA(ClassificationCode);

你能告诉我这个问题的任何解决方案吗?谢谢

【问题讨论】:

  • 如果你共享查询的执行计划,我们可以知道。否则,很难说。
  • My sql 查询创建聚集索引:CREATE PARTITION FUNCTION PARTITION_MYDATA (CHAR(4)) AS RANGE RIGHT FOR VALUES ('1000','1001',...,'5000'); CREATE PARTITION SCHEME SCHEME_MYDATA AS PARTITION PARTITION_MYDATA ALL TO ([PRIMARY]) ;创建集群索引 IX_MyData_partitioncol ON dbo.MyData(ClassificationCode) WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON SCHEME_MYDATA(ClassificationCode)
  • 返回多少行?您的查询是否指定WHERE ClassificationCode = ...?上传您的实际执行计划 xml here 并将链接添加到您的问题。

标签: sql-server


【解决方案1】:

由于您没有共享执行计划,根据您的问题,我认为您的分区与查询模式不一致。因此,获取分布式数据需要更多时间。我建议您根据查询模式对数据进行分区,以利用partition filtering。您有分区对齐的聚集索引。因此,数据分布在分区中。阅读query enhancement for partitioning based on query parameter

例如,您主要是根据 EmployeeNumber 查询数据。然后, 根据 EmployeeNumber 创建分区。

如果您在 EmployeeSalary,然后基于 EmployeeNumber 的查询必须扫描 分区来获取 EmployeeNumber 和分区过滤将 不会发生。

另一件事是,使用 Azure,这将需要更多时间,因为数据位于远程数据中心,并且存在网络传输时间。使用本地 LAN,速度会更快,因为数据位于本地。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    • 2019-06-27
    • 1970-01-01
    • 2012-02-08
    相关资源
    最近更新 更多