sql server 分区表之查看分区表的相关数据

您所在的位置:网站首页 查看数据表的语句有哪些 sql server 分区表之查看分区表的相关数据

sql server 分区表之查看分区表的相关数据

2024-02-06 15:28| 来源: 网络整理| 查看: 265

在向分区表中插入数据方法和在普遍表中插入数据的方法是完全相同的,对于程序员而言,不需要去理会这13条记录研究放在哪个数据表中。当然,在查询数据时,也可以不用理会数据到底是存放在哪个物理上的数据表中。如使用以下SQL语句进行查询:

[c-sharp]  view plain copy 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函数可以得到物理分区表的编号,那么只要将$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) as 分区编号,count(id) as 记录数 from Sale group by $PARTITION.partfunSale(SaleTime)    

    以上代码的运行结果如下图所示:

 

    除了在插入数据时程序员不需要去考虑分区表的物理情况之外,就是连修改数据也不需要考虑。SQL Server会自动将记录从一个分区表移到另一个分区表中,如以下代码所示:

[c-sharp]  view plain copy --统计所有分区表中的记录总数   select $PARTITION.partfunSale(SaleTime) as 分区编号,count(id) as 记录数 from Sale group by $PARTITION.partfunSale(SaleTime)   --修改编号为1的记录,将时间改为2019年1月1日   update Sale set SaleTime='2019-1-1' where id=1   --重新统计所有分区表中的记录总数   select $PARTITION.partfunSale(SaleTime) as 分区编号,count(id) as 记录数 from Sale group by $PARTITION.partfunSale(SaleTime)    

    在以上代码中,程序员将其中一条数据的时间改变了,从分区函数中可以得知,这条记录应该从第一个分区表移到第五个分区表中,如下图所示。而整个操作过程,程序员是完全不需要干预的。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3