sql server 分区表之查看分区表的相关数据
2014-11-27 16:02
267 查看
在向分区表中插入数据方法和在普遍表中插入数据的方法是完全相同的,对于程序员而言,不需要去理会这13条记录研究放在哪个数据表中。当然,在查询数据时,也可以不用理会数据到底是存放在哪个物理上的数据表中。如使用以下SQL语句进行查询:
[c-sharp] view
plaincopy
select * from Sale
查询的结果如下图所示:
从上面两个步骤中,根本就感觉不到数据是分别存放在几个不同的物理表中,因为在逻辑上,这些数据都属于同一个数据表。如果你非想知道哪条记录是放在哪个物理上的分区表中,那么就必须使用到$PARTITION函数,这个函数的可以调用分区函数,并返回数据所在物理分区的编号。
说起来有点难懂,不过用起来很简单。$PARTITION的语法是:
$PARTITION.分区函数名(表达式)
假设,你想知道2010年10月1日的数据会放在哪个物理分区表中,你就可以使用以下语句来查看。
[c-sharp] view
plaincopy
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
plaincopy
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
plaincopy
select $PARTITION.partfunSale(SaleTime) as 分区编号,count(id) as 记录数 from Sale group by $PARTITION.partfunSale(SaleTime)
以上代码的运行结果如下图所示:
除了在插入数据时程序员不需要去考虑分区表的物理情况之外,就是连修改数据也不需要考虑。SQL Server会自动将记录从一个分区表移到另一个分区表中,如以下代码所示:
[c-sharp] view
plaincopy
--统计所有分区表中的记录总数
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)
在以上代码中,程序员将其中一条数据的时间改变了,从分区函数中可以得知,这条记录应该从第一个分区表移到第五个分区表中,如下图所示。而整个操作过程,程序员是完全不需要干预的。
[c-sharp] view
plaincopy
select * from Sale
查询的结果如下图所示:
从上面两个步骤中,根本就感觉不到数据是分别存放在几个不同的物理表中,因为在逻辑上,这些数据都属于同一个数据表。如果你非想知道哪条记录是放在哪个物理上的分区表中,那么就必须使用到$PARTITION函数,这个函数的可以调用分区函数,并返回数据所在物理分区的编号。
说起来有点难懂,不过用起来很简单。$PARTITION的语法是:
$PARTITION.分区函数名(表达式)
假设,你想知道2010年10月1日的数据会放在哪个物理分区表中,你就可以使用以下语句来查看。
[c-sharp] view
plaincopy
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
plaincopy
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
plaincopy
select $PARTITION.partfunSale(SaleTime) as 分区编号,count(id) as 记录数 from Sale group by $PARTITION.partfunSale(SaleTime)
以上代码的运行结果如下图所示:
除了在插入数据时程序员不需要去考虑分区表的物理情况之外,就是连修改数据也不需要考虑。SQL Server会自动将记录从一个分区表移到另一个分区表中,如以下代码所示:
[c-sharp] view
plaincopy
--统计所有分区表中的记录总数
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)
在以上代码中,程序员将其中一条数据的时间改变了,从分区函数中可以得知,这条记录应该从第一个分区表移到第五个分区表中,如下图所示。而整个操作过程,程序员是完全不需要干预的。
相关文章推荐
- SQL Server 2005教程:如何创建修改分区表和如何查看分区表
- 在SQL server 2000中打开表查看数据的时候,提示说“无法执行查询,因为一些文件缺少或未注册”
- 怎样查看SQL Server数据表的数据页结构(转载)
- 清除SQL Server数据缓存和执行计划缓存,查看执行计划的各种方式对比
- 在SQL SERVER查看数据库中有哪些数据表
- 下载并安装SQL Server 2005 Express 图形管理器及示例数据的相关地址及说明
- sql server 分区表与数据仓库
- SQL Server 2005:查看分区表(partition table)的分区范围(partition range)
- SQL Server 查询数据并汇总相关技巧
- SQL Server数据仓库相关概念及构建流程
- ADOMD.NET实现多维数据库数据挖掘相关信息查看功能
- SQL Server 2005:查看分区表(partition table)的分区范围(partition range)
- SQL Server 2005教程:如何创建修改分区表和如何查看分区表(经典)
- SQL Server 2005中的分区表(二):如何添加、查询、修改分区表中的数据
- Sql Server 性能分析1 –查看数据库的相关信息
- SQL Server数据仓库相关概念及构建流程
- 清除SQL Server数据缓存和执行计划缓存,查看执行计划的各种方式对比
- Sql Server 中查看某一数据库及数据表所占空间大小
- SQL Server 2005中的分区表(二):如何添加、查询、修改分区表中的数据
- SQL Server 2005:查看分区表(partition table)的分区范围(partition range)