分区问题

时间:2016-07-14 09:03:37

标签: partitioning spool eager

寻找我的SQL服务器数据库的横向扩展选项。
我有一个有1500万行的表,每天增加10,000行。 从可用于扩展的各种选项中我选择了分区,因为只需要在数据库中进行更改,应用程序代码将保持不变。 表I分区是BOOKING表,它有以下列: -
1) Bookingid
2)订购的 3)用户ID 4)开始时间
5)结束时间
还有更多

我决定每年对此表进行分区,因此我选择了Starttime列作为我的分区键。 首先,我将BOOKING表的副本创建为BOOKING_Partition,将Booking表的所有数据导入Booking_Partition表。

分区步骤: -
1)创建文件组
2)将文件附加到文件组
3)创建分区功能
4)创建分区方案
6)在分区方案上使用Starttime(分区键)和Bookingid(我使用组合)创建了群集索引 7)最后,我通过运行查询来检查分区是否成功。是的,我的桌子已成功分区。

现在我想查看我的现有查询是否有任何性能变化 我检查了最常用的查询,如果在应用程序加载时提取数据40天

SELECT Bookingid,OrderId,UserId FROM Booking_Partition WHERE Starttime> = GETDATE() - 20 AND St​​arttime< GETDATE()+ 20

以上只是一个示例,在生产时,此查询已加入以从其他表中获取数据 当我在分区表和非分区表上运行此查询时,分析器显示几乎相同的持续时间,性能没有差异。

选择查询执行计划的图片: -  Image for Select query execution plan

上面的计划是针对分区表,它显示了命中分区,但正如我所说的,分析器显示分区和非分区表的持续时间没有变化。 此外,我无法理解为什么它需要4个分区才能获取40天的数据。

现在我的主要关注点在我更新或删除时到来 当我在分区表上更新或删除时,它会在执行计划中显示急切的假脱机。

更新查询执行计划的图片显示急切的假脱机: - Image for Update query execution plan showing eager spool

我无法理解为什么只在我在分区表上更新或删除时才进行急切的假脱机,当我在非分区表上运行时,它不会做急切的假脱机。

0 个答案:

没有答案