SQL Server 2008 中的分区表(二):如何添加、查询
select?*?from?Sale??
查询的结果如下图所示:
从上面两个步骤中,根本就感觉不到数据是分别存放在几个不同的物理表中,因为在逻辑上,这些数据都属于同一个数据表。如果你非想知道哪条记录是放在哪个物理上的分区表中,那么就必须使用到 $PARTITION 函数,这个函数的可以调用分区函数,并返回数据所在物理分区的编号。
说起来有点难懂,不过用起来很简单。$PARTITION 的语法是:
$PARTITION.分区函数名(表达式)
假设,你想知道 2010 年 10 月 1 日的数据会放在哪个物理分区表中,你就可以使用以下语句来查看。
[c-sharp]? view plain copy
select?$PARTITION.partfunSale?('2010-10-1')??
在以上语句中,partfunSale()为分区函数名,括号中的表达式必须是日期型的数据或可以隐式转换成日期型的数据,如果要问我为什么,那么就回想一个怎么定义分区函数的吧(CREATE?PARTITION?FUNCTION?partfunSale?(datetime))。在定义 partfunSale()函数时,指定了参数为日期型,所以括号中的表达式必须是日期型或可以隐式转换成日期型的数据。以上代码的运行结果如下图所示:
在该图中可以看出,分区函数返回的结果为 2,也就是说,2010 年 10 月 1 日的数据会放在第 2 个物理分区表中。
再进一步考虑,如果想具体知道每个物理分区表中存放了哪些记录,也可以使用PARTITION 函数可以得到物理分区表的编号,那么只要将 $PARTITION.partfunSale(SaleTime)做为 where 的条件使用即可,如以下代码 所示:
[c-sharp]? view plain copy
select?*?from?Sale?where?$PARTITION.partfunSale(SaleTime)=1??
select?*?from?Sale?where?$PARTITION.partfunSale(SaleTime)=2??
select?*?from?Sale?where?$PARTITION.partfunSale(SaleTime)=3??
select?*?from?Sale?where?$PARTITION.partfunSale(SaleTime)=4??
select?*?from?Sale?where?$PARTITION.partfunSale(SaleTime)=5??
以上代码的运行结果如下图所示:
从上图中我们可以看到每个分区表中的数据记录情况——和我们插入时设置的情况完全一致。同理可得,如果要统计每个物理分区表中的记录数,可以使用如下代码:
[c-sharp]? view plain copy
select?PARTITION.partfunSale(SaleTime)??
以上代码的运行结果如下图所示:
评论