创建CLUSTERED INDEX分区后,数据查询缓慢[Azure]

时间:2019-03-15 04:01:31

标签: sql-server

在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);

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

1 个答案:

答案 0 :(得分:0)

由于您尚未共享执行计划,因此根据您的问题,我认为您的分区与查询模式不符。因此,要花费更多的时间来获取分布式数据。我建议您根据查询模式对数据进行分区,以利用partition filtering的优势。您正在使用分区对齐的聚集索引。因此,数据分布在分区中。了解有关query enhancement for partitioning based on query parameter

的信息
  

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

     

如果您在以下位置创建分区   EmployeeSalary,然后基于EmployeeNumber的查询必须进行扫描   分区以获取EmployeeNumber,分区过滤将   不会发生。

另一方面,对于Azure,由于数据位于远程数据中心中并且网络传输时间在那里,因此将花费更多时间。使用本地局域网,由于数据位于本地,因此速度会更快。