在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);
您能告诉我这个问题的任何解决方案吗?谢谢
答案 0 :(得分:0)
由于您尚未共享执行计划,因此根据您的问题,我认为您的分区与查询模式不符。因此,要花费更多的时间来获取分布式数据。我建议您根据查询模式对数据进行分区,以利用partition filtering
的优势。您正在使用分区对齐的聚集索引。因此,数据分布在分区中。了解有关query enhancement for partitioning based on query parameter
例如,您主要是根据EmployeeNumber查询数据。然后, 根据EmployeeNumber创建分区。
如果您在以下位置创建分区 EmployeeSalary,然后基于EmployeeNumber的查询必须进行扫描 分区以获取EmployeeNumber,分区过滤将 不会发生。
另一方面,对于Azure,由于数据位于远程数据中心中并且网络传输时间在那里,因此将花费更多时间。使用本地局域网,由于数据位于本地,因此速度会更快。