3. 此时数据已经加载到了分区中,点击Execute 执行如下代码,显示每一条记录的OrderDate 字段以及所在的分区编号
SELECT OrderDate,
$partition.OrderDateRangePFN(OrderDate)
AS 'Partition Number'
FROM OrdersRange
ORDER BY OrderDate
GO
$partition.OrderDateRangePFN(OrderDate)
AS 'Partition Number'
FROM OrdersRange
ORDER BY OrderDate
GO
4. 此外,我们不仅能查看每一条记录所在的分区,还可以通过下面的查询语句来显示每一个分区中包含多少条记录以及该分区中OrderDate 字段的最大值和最小值
SELECT $partition.OrderDateRangePFN(OrderDate)
AS 'Partition Number'
, min(OrderDate) AS 'Min Order Date'
, max(OrderDate) AS 'Max Order Date'
, count(*) AS 'Rows In Partition'
FROM OrdersRange
GROUP BY $partition.OrderDateRangePFN(OrderDate)
ORDER BY 1
AS 'Partition Number'
, min(OrderDate) AS 'Min Order Date'
, max(OrderDate) AS 'Max Order Date'
, count(*) AS 'Rows In Partition'
FROM OrdersRange
GROUP BY $partition.OrderDateRangePFN(OrderDate)
ORDER BY 1
在两个数据表中创建聚集索引,以便了解对查询计划所产生的影响
通常来说,拥有聚集索引的数据表结构会更为优化。出色的聚集索引设计可以有效提高查询性能,减少碎片,并有助于各种类型的表访问。在分区数据表的应用场景之下,其实默认已经根据分区键创建了一个理想的聚集索引。但如果只通过分区键创建聚集索引有可能会产生一些负面作用,因为索引键必须是唯一的。最为理想的聚集索引应当定义为OrderDate 列和PurchaseOrderID 列的复合索引。此外,由于聚集索引将决定数据如何存储,因此必须将其创建在分区方案上。
1. 点击Execute 执行如下代码,为分区数据表创建聚集索引:
CREATE CLUSTERED INDEX OrdersRangeCLInd
ON OrdersRange(OrderDate, OrderID)
ON OrderDatePScheme(OrderDate)
GO
ON OrdersRange(OrderDate, OrderID)
ON OrderDatePScheme(OrderDate)
GO
2. 为了便于对比,点击Execute 执行如下脚本,为没有经过分区的Orders 数据表创建聚集索引:
CREATE CLUSTERED INDEX OrdersCLInd
ON Orders(OrderDate, OrderID)
ON [PRIMARY]
ON Orders(OrderDate, OrderID)
ON [PRIMARY]
3. 在工具栏中选中“Include Actual Execution Plan”,然后执行如下脚本,并在Execute plan 选项卡中查看查询计划
SELECT * FROM Orders
SELECT * FROM OrdersRange
GO
SELECT * FROM OrdersRange
GO
4. 在Execution plan 选项卡中,选中“Clustered Index Scan”,并在属性窗口中可以看到, “Actual Partitions Accessed” 为 1..5 且Actual Partition Count 为5,如下图所示:
关闭Script3 - RangePartitionedTable.sql