目录

  • 一、常用分区步骤

    • 1.创建文件组
    • 2.创建数据文件到文件组里面
    • 3.使用图形界面向导创建分区表(不推荐)
    • 3.使用T-SQL构建分区函数与分区方案(推荐)
    • 【3.1】建表时构造
    • 【3.2】已有表构造
  • 二、分区对象介绍
    • 1.分区函数
    • 2.分区方案
    • 3.分区表
    • 4.分区索引(现有表分区)
  • 三、查阅分区表明细
    • 1.查看分区依据列的指定值所在的分区
    • 2.查看分区表中,每个非空分区存在的行数
    • 3.查看指定分区中的数据记录
  • 四、分区的拆分/合并/数据移动
    • 1.拆分/增加分区
    • 2.合并分区
    • 3.分区中的数据移动
  • 查看数据库分区信息
  • 【5】我的搭建实践
    • 【5.1】新建表搭建

SQL Server表分区,sql server水平分区

 
根据时间的,直接上T-SQL代码的水平分区:https://www.xuebuyuan.com/1817312.html?tdsourcetag=s_pcqq_aiomsg

什么是表分区

一般情况下,我们建立数据库表时,表数据都存放在一个文件里。

但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆分为多个小文件,还可以把这些小文件放在不同的磁盘下由多个cpu进行处理。这样文件的大小随着拆分而减小,还得到硬件系统的加强,自然对我们操作数据是大大有利的。

所以大数据量的数据表,对分区的需要还是必要的,因为它可以提高select效率,还可以对历史数据经行区分存档等。但是数据量少的数据就不要凑这个热闹啦,因为表分区会对数据库产生不必要的开销,除啦性能还会增加实现对象的管理费用和复杂性。

回到顶部

一、常用分区步骤

步骤如下:

1.创建文件组

2.创建数据文件到文件组里面

3.构建分区函数

4.构建分区方案

5.应用到新建表

先跟着做一个分区表(分为11个分区),去除神秘的面纱,然后咱们再逐一击破各个要点要害。

分区是要把一个表数据拆分为若干子集合,也就是把把一个数据文件拆分到多个数据文件中,然而这些文件的存放可以依托一个文件组或这多个文件组,由于多个文件组可以提高数据库的访问并发量,还可以把不同的分区配置到不同的磁盘中提高效率,所以创建时建议分区跟文件组个数相同。

1.创建文件组

可以点击数据库属性在文件组里面添加

T-sql语法:

alter database <数据库名> add filegroup <文件组名>
---创建数据库文件组
alter database testSplit add filegroup ByIdGroup1
alter database testSplit add filegroup ByIdGroup2
alter database testSplit add filegroup ByIdGroup3
alter database testSplit add filegroup ByIdGroup4
alter database testSplit add filegroup ByIdGroup5
alter database testSplit add filegroup ByIdGroup6
alter database testSplit add filegroup ByIdGroup7
alter database testSplit add filegroup ByIdGroup8
alter database testSplit add filegroup ByIdGroup9
alter database testSplit add filegroup ByIdGroup10

2.创建数据文件到文件组里面

可以点击数据库属性在文件里面添加

T-sql语法:

alter database <数据库名称> add file <数据标识> to filegroup <文件组名称>

--<数据标识> (name:文件名,fliename:物理路径文件名,size:文件初始大小kb/mb/gb/tb,filegrowth:文件自动增量kb/mb/gb/tb/%,maxsize:文件可以增加到的最大大小kb/mb/gb/tb/unlimited)
alter database testSplit add file
(name=N'ById1',filename=N'J:\Work\数据库\data\ById1.ndf',size=5Mb,filegrowth=5mb)
to filegroup ByIdGroup1
alter database testSplit add file
(name=N'ById2',filename=N'J:\Work\数据库\data\ById2.ndf',size=5Mb,filegrowth=5mb)
to filegroup ByIdGroup2
alter database testSplit add file
(name=N'ById3',filename=N'J:\Work\数据库\data\ById3.ndf',size=5Mb,filegrowth=5mb)
to filegroup ByIdGroup3
alter database testSplit add file
(name=N'ById4',filename=N'J:\Work\数据库\data\ById4.ndf',size=5Mb,filegrowth=5mb)
to filegroup ByIdGroup4
alter database testSplit add file
(name=N'ById5',filename=N'J:\Work\数据库\data\ById5.ndf',size=5Mb,filegrowth=5mb)
to filegroup ByIdGroup5
alter database testSplit add file
(name=N'ById6',filename=N'J:\Work\数据库\data\ById6.ndf',size=5Mb,filegrowth=5mb)
to filegroup ByIdGroup6
alter database testSplit add file
(name=N'ById7',filename=N'J:\Work\数据库\data\ById7.ndf',size=5Mb,filegrowth=5mb)
to filegroup ByIdGroup7
alter database testSplit add file
(name=N'ById8',filename=N'J:\Work\数据库\data\ById8.ndf',size=5Mb,filegrowth=5mb)
to filegroup ByIdGroup8
alter database testSplit add file
(name=N'ById9',filename=N'J:\Work\数据库\data\ById9.ndf',size=5Mb,filegrowth=5mb)
to filegroup ByIdGroup9
alter database testSplit add file
(name=N'ById10',filename=N'J:\Work\数据库\data\ById10.ndf',size=5Mb,filegrowth=5mb)
to filegroup ByIdGroup10

执行完成后,右键数据库看文件组跟文件里面是不是多出来啦这些文件组跟文件。

3.使用图形界面向导创建分区表(不推荐)

右键到要分区的表--- >> 存储 --- >> 创建分区 --- >>显示向导视图 --- >> 下一步 --- >> 下一步。。

这里举例说下选择列的意思:

假如你选择的是int类型的列:那么你的分区可以指定为1--100W是一个分区,100W--200W是一个分区....

假如你选择的是datatime类型:那么你的分区可以指定为:2014-01-01--2014-01-31一个分区,2014-02-01--2014-02-28一个分区...

根据这样的列数据规则划分,那么在那个区间的数据,在插入数据库时就被指向那个分区存储下来。

我这里选用orderid int类型 --- >> 下一步 --- >>

左边界右边界:就是把临界值划分给上一个分区还是下一个分区。一个小于号,一个小于等于号。

然后下一步下一步最后你会得到分区函数和分区方案。

3.使用T-SQL构建分区函数与分区方案(推荐)

【3.1】建表时构造

USE [testSplit]
GO
BEGIN TRANSACTION --创建分区函数
CREATE PARTITION FUNCTION [bgPartitionFun](int) AS RANGE LEFT FOR VALUES (N'1000000', N'2000000', N'3000000', N'4000000', N'5000000', N'6000000', N'7000000', N'8000000', N'9000000', N'10000000') --创建分区方案
CREATE PARTITION SCHEME [bgPartitionSchema] AS PARTITION [bgPartitionFun] TO ([PRIMARY], [ByIdGroup1], [ByIdGroup2], [ByIdGroup3], [ByIdGroup4], [ByIdGroup5], [ByIdGroup6], [ByIdGroup7], [ByIdGroup8], [ByIdGroup9], [ByIdGroup10]) --创建分区索引
CREATE CLUSTERED INDEX [ClusteredIndex_on_bgPartitionSchema_635342971076448165] ON [dbo].[BigOrder]
(
[OrderId]
)WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [bgPartitionSchema]([OrderId]) --删除分区索引
DROP INDEX [ClusteredIndex_on_bgPartitionSchema_635342971076448165] ON [dbo].[BigOrder] WITH ( ONLINE = OFF ) COMMIT TRANSACTION

--如果要在新建表上应用分区方案则如下
--应用分区计划到新建表

create table test3 -- 表名称
(
id int not null primary key nonclustered, -- 字段名称、字段类型、是否可空、主键约束、非聚集索引
column1 int not null 
) ON [schema_partiton](id)

执行上面向导生成的语句。分区完成。。

  秀一下速度。

首先我在表中插入啦1千万行数据。给表分啦11个分区。前十个分区里面一个是100W条数据。。

说两句:

可见反常现象,扫描次数跟逻辑读取次数都是无分区表的2倍之多,但查询速度却是快啦不少啊。这就是分区的神奇之处啊,所以要相信这世界一切皆有可能。

【3.2】已有表构造

将普通表转换为分区表: 当数据库已经存在数据的时候,就不能像上面那样直接建立分区表了,只能将普通表转换为分区表,只需在该普通表上创建一个聚集索引,并在该聚集索引中使用分区方案即可。

如果是已经存在的聚集索引,那么需要删除然后重新建立,并使用分区方案。

现在我有一个现成的表 UserInfo,因为它存在一个主键,而建立主键时,系统会自动为主键列添加聚集索引,因为这个聚集索引没法删除。

所以我现在要先删除这个主键,然后重新建立一个主键,并设置为非聚集索引,然后为主键创建一个聚集索引(会覆盖非聚集索引),并使用分区方案指定分区列即可。

-- 根据 指定表名 查询 表的约束
exec sp_helpconstraint UserInfo -- UserInfo 表名 -- 根据指定主键约束名删除指定表的主键约束
alter table UserInfo drop constraint PK__UserInfo__5A2040BBA6D6767A -- 添加主键约束,但设置为非聚集索引
alter table UserInfo add constraint PK__UserInfo__5A2040BBA6D6767A primary key nonclustered (U_Id) -- 添加一个聚集索引,并使用分区方案指定分区的列 create clustered index CLU_StuNo -- 索引名称
on UserInfo(U_Id) -- 指定添加索引的表(添加索引的列)
on Part_Plan(U_Id) -- 分区方案名称(分区依据的列)
回到顶部

二、分区对象介绍

1.分区函数

指定分依据区列(依据列唯一),分区数据范围规则,分区数量,然后将数据映射到一组分区上。

创建语法:

create partition function 分区函数名(<分区列类型>) as range [left/right]
for values (每个分区的边界值,....) 
--创建分区函数
CREATE PARTITION FUNCTION [bgPartitionFun](int) AS RANGE LEFT FOR VALUES (N'1000000', N'2000000', N'3000000', N'4000000', N'5000000', N'6000000', N'7000000', N'8000000', N'9000000', N'10000000')

然而,分区函数只定义了分区的方法,此方法具体用在哪个表的那一列上,则需要在创建表或索引是指定。

删除语法:

--删除分区语法
drop partition function <分区函数名>
--删除分区函数 bgPartitionFun
drop partition function bgPartitionFun

需要注意的是,只有没有应用到分区方案中的分区函数才能被删除。

2.分区方案

指定分区对应的文件组。

创建语法:

--创建分区方案语法
create partition scheme <分区方案名称> as partition <分区函数名称> [all]to (文件组名称,....) 
--创建分区方案,所有分区在一个组里面
CREATE PARTITION SCHEME [bgPartitionSchema] AS PARTITION [bgPartitionFun] TO ([ByIdGroup1], [ByIdGroup1], [ByIdGroup1], [ByIdGroup1], [ByIdGroup1], [ByIdGroup1], [ByIdGroup1], [ByIdGroup1], [ByIdGroup1], [ByIdGroup1], [ByIdGroup1])

分区函数必须关联分区方案才能有效,然而分区方案指定的文件组数量必须与分区数量一致,哪怕多个分区存放在一个文件组中。

删除语法:

--删除分区方案语法
drop partition scheme<分区方案名称>
--删除分区方案 bgPartitionSchema
drop partition scheme bgPartitionSchema1

只有没有分区表,或索引使用该分区方案是,才能对其删除。

3.分区表

创建语法:

--创建分区表语法
create table <表名> (
<列定义>
)on<分区方案名>(分区列名)

--创建分区表
create table BigOrder (
OrderId int identity,
orderNum varchar(30) not null,
OrderStatus int not null default 0,
OrderPayStatus int not null default 0,
UserId varchar(40) not null,
CreateDate datetime null default getdate(),
Mark nvarchar(300) null
)on bgPartitionSchema(OrderId)

如果在表中创建主键或唯一索引,则分区依据列必须为该列。

4.分区索引(现有表分区)

创建语法:

--创建分区索引语法
create <索引分类> index <索引名称>
on <表名>(列名)
on <分区方案名>(分区依据列名)
--创建分区索引
CREATE CLUSTERED INDEX [ClusteredIndex_on_bgPartitionSchema_635342971076448165] ON [dbo].[BigOrder]
(
[OrderId]
)WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [bgPartitionSchema]([OrderId])

使用分区索引查询,可以避免多个cpu操作多个磁盘时产生的冲突。

回到顶部

三、查阅分区表明细

这里的语法,我就不写啦,自己看语句分析吧。简单的很。。

1.查看分区依据列的指定值所在的分区

--查询分区依据列为10000014的数据在哪个分区上
select $partition.bgPartitionFun(2000000) --返回值是2,表示此值存在第2个分区 

2.查看分区表中,每个非空分区存在的行数

--查看分区表中,每个非空分区存在的行数
select $partition.bgPartitionFun(orderid) as partitionNum,count(*) as recordCount
from bigorder
group by $partition.bgPartitionFun(orderid)

3.查看指定分区中的数据记录

---查看指定分区中的数据记录
select * from bigorder where $partition.bgPartitionFun(orderid)=2

结果:数据从1000001开始到200W结束

回到顶部

四、分区的拆分/合并/数据移动

---增加新的分区你可以将的分区加到新的文件组里面(也可以是使用过的)

alter partition scheme [bgPartitionSchema] -----先为分区方案分配文件组
next used [primary]

 1.拆分/增加分区

在分区函数中新增一个边界值,即可将一个分区变为2个。放到最前或者最后来拆分就是新增分区

--分区拆分
alter partition function bgPartitionFun()
split range(N'1500000') --将第二个分区拆为2个分区

注意:如果分区函数已经指定了分区方案,则分区数需要和分区方案中指定的文件组个数保持对应一致。

 2.合并分区

与拆分分区相反,去除一个边界值即可。

--合并分区
alter partition function bgPartitionFun()
merge range(N'1500000') --将第二第三分区合并

3.分区中的数据移动

你或许会遇到这样的需求,将普通表数据复制到分区表中,或者将分区表中的数据复制到普通表中。

那么移动数据这两个表,则必须满足下面的要求。

  • 字段数量相同,对应位置的字段相同
  • 相同位置的字段要有相同的属性,相同的类型。
  • 两个表在一个文件组中

1.创建表时指定文件组

--创建表
create table <表名> (
<列定义>
)on <文件组名>

2.从分区表中复制数据到普通表

--将bigorder分区表中的第一分区数据复制到普通表中
alter table bigorder switch partition 1 to <普通表名>

3.从普通标中复制数据到分区表中

这里要注意的是要先将分区表中的索引删除,即便普通表中存在跟分区表中相同的索引。

--将普通表中的数据复制到bigorder分区表中的第一分区
alter table <普通表名> switch to bigorder partition 1

分区视图

分区视图是先建立带有字段约束的相同表,而约束不同,例如,第一个表的id约束为0--100W,第二表为101万到200万.....依次类推。

创建完一系列的表之后,用union all 连接起来创建一个视图,这个视图就形成啦分区视同。

很简单的,这里我主要是说分区表,就不说分区视图啦。。

回到顶部

查看数据库分区信息

SELECT OBJECT_NAME(p.object_id) AS ObjectName,
i.name AS IndexName,
p.index_id AS IndexID,
ds.name AS PartitionScheme,
p.partition_number AS PartitionNumber,
fg.name AS FileGroupName,
prv_left.value AS LowerBoundaryValue,
prv_right.value AS UpperBoundaryValue,
CASE pf.boundary_value_on_right
WHEN 1 THEN 'RIGHT'
ELSE 'LEFT' END AS Range,
p.rows AS Rows
FROM sys.partitions AS p
JOIN sys.indexes AS i
ON i.object_id = p.object_id
AND i.index_id = p.index_id
JOIN sys.data_spaces AS ds
ON ds.data_space_id = i.data_space_id
JOIN sys.partition_schemes AS ps
ON ps.data_space_id = ds.data_space_id
JOIN sys.partition_functions AS pf
ON pf.function_id = ps.function_id
JOIN sys.destination_data_spaces AS dds2
ON dds2.partition_scheme_id = ps.data_space_id
AND dds2.destination_id = p.partition_number
JOIN sys.filegroups AS fg
ON fg.data_space_id = dds2.data_space_id
LEFT JOIN sys.partition_range_values AS prv_left
ON ps.function_id = prv_left.function_id
AND prv_left.boundary_id = p.partition_number - 1
LEFT JOIN sys.partition_range_values AS prv_right
ON ps.function_id = prv_right.function_id
AND prv_right.boundary_id = p.partition_number
WHERE
OBJECTPROPERTY(p.object_id, 'ISMSShipped') = 0
UNION ALL
SELECT
OBJECT_NAME(p.object_id) AS ObjectName,
i.name AS IndexName,
p.index_id AS IndexID,
NULL AS PartitionScheme,
p.partition_number AS PartitionNumber,
fg.name AS FileGroupName,
NULL AS LowerBoundaryValue,
NULL AS UpperBoundaryValue,
NULL AS Boundary,
p.rows AS Rows
FROM sys.partitions AS p
JOIN sys.indexes AS i
ON i.object_id = p.object_id
AND i.index_id = p.index_id
JOIN sys.data_spaces AS ds
ON ds.data_space_id = i.data_space_id
JOIN sys.filegroups AS fg
ON fg.data_space_id = i.data_space_id
WHERE
OBJECTPROPERTY(p.object_id, 'ISMSShipped') = 0
ORDER BY
ObjectName,
IndexID,
PartitionNumber
回到顶部

【5】我的搭建实践

【5.1】新建表搭建

if db_id('test') is null
create database test;
alter database test add filegroup ByIdGroup1
alter database test add filegroup ByIdGroup2
alter database test add filegroup ByIdGroup3
alter database test add filegroup ByIdGroup4
alter database test add filegroup ByIdGroup5
alter database test add filegroup ByIdGroup6
alter database test add filegroup ByIdGroup7
alter database test add filegroup ByIdGroup8
alter database test add filegroup ByIdGroup9
alter database test add filegroup ByIdGroup10 alter database test add file (name=N'ById1',filename=N'E:\Sql_Server_test\testdbById1.ndf',size=5Mb,filegrowth=5mb) to filegroup ByIdGroup1
alter database test add file (name=N'ById2',filename=N'E:\Sql_Server_test\testdbById2.ndf',size=5Mb,filegrowth=5mb) to filegroup ByIdGroup2
alter database test add file (name=N'ById3',filename=N'E:\Sql_Server_test\testdbById3.ndf',size=5Mb,filegrowth=5mb) to filegroup ByIdGroup3
alter database test add file (name=N'ById4',filename=N'E:\Sql_Server_test\testdbById4.ndf',size=5Mb,filegrowth=5mb) to filegroup ByIdGroup4
alter database test add file (name=N'ById5',filename=N'E:\Sql_Server_test\testdbById5.ndf',size=5Mb,filegrowth=5mb) to filegroup ByIdGroup5
alter database test add file (name=N'ById6',filename=N'E:\Sql_Server_test\testdbById6.ndf',size=5Mb,filegrowth=5mb) to filegroup ByIdGroup6
alter database test add file (name=N'ById7',filename=N'E:\Sql_Server_test\testdbById7.ndf',size=5Mb,filegrowth=5mb) to filegroup ByIdGroup7
alter database test add file (name=N'ById8',filename=N'E:\Sql_Server_test\testdbById8.ndf',size=5Mb,filegrowth=5mb) to filegroup ByIdGroup8
alter database test add file (name=N'ById9',filename=N'E:\Sql_Server_test\testdbById9.ndf',size=5Mb,filegrowth=5mb) to filegroup ByIdGroup9
alter database test add file (name=N'ById10',filename=N'E:\Sql_Server_test\testdbById10.ndf',size=5Mb,filegrowth=5mb) to filegroup ByIdGroup10 use test;
go
CREATE PARTITION FUNCTION [bgPartitionFun](int) AS RANGE LEFT FOR VALUES (N'1000000', N'2000000', N'3000000', N'4000000', N'5000000', N'6000000', N'7000000', N'8000000', N'9000000', N'10000000')
go
--创建分区方案
CREATE PARTITION SCHEME [bgPartitionSchema] AS PARTITION [bgPartitionFun] TO ([PRIMARY], [ByIdGroup1], [ByIdGroup2], [ByIdGroup3], [ByIdGroup4], [ByIdGroup5], [ByIdGroup6], [ByIdGroup7], [ByIdGroup8], [ByIdGroup9], [ByIdGroup10])
go
create table test2 -- 表名称
(
id int not null primary key nonclustered, -- 字段名称、字段类型、是否可空、主键约束、非聚集索引
column1 int not null
) ON [bgPartitionSchema](id)
go

--使用【4】中的检查数据库分区信息 SQL
  

大神原文地址:https://www.cnblogs.com/gered/p/8856585.html#_label0_0

-------------------------------------------分割线----------------------------------------

如何删除SqlServer分区函数

 

我们都知道,SQL server2008R2企业版以及一些其它的版本支持分区函数,当你在这些数据库备份后想在一些不支持分区函数的数据库做还原时,就会失败。

下面我们来解决这个问题。

1.备份数据库!备份数据库!备份数据库! (对数据库动任何刀子前先备份)

2.删除分区函数所涉及的表,因为在建表的时候我们做了关联,所以删除主要是切断这个关联以及相关的文件。

3.删除关联、删除分区文件 sql语句如下

select * from sys.partition_schemes 查询分区
select * from sys.partition_range_values 查询分区范围
select * from sys.partition_functions 查询分区函数
DROP PARTITION SCHEME 查询分区.[name]
DROP PARTITION FUNCTION 查询分区函数.[name]

执行Drop语句后再做上面的查询应该已经查不到任何内容。

删除分区文件

ALTER DATABASE [DataBase] REMOVE FILE [分区文件名];
ALTER DATABASE [DataBase] REMOVE FILEGROUP [分区文件组名]

名称可以通过对应库的创建脚本查看

.

.

.

可能有多个这样的分区和分区组手动一一执行吧

到这里所有的删除就已经完成了,备份,还原,成功!

这里再多分享一个我碰到的问题,上面的方法在高版本(sqlserver2016)下已经没有问题,但是碰到需要还原的数据库为低版本有兼容性问题,这个问题碰到过很多次,我的方法是在高版本下生成创建数据库的脚本和创建数据库数据的脚本,这里脚本的内容可能比较大会造成打不开的情况。所以就用远程创建一个链接服务器,将数据倒插入低版本数据库。有余表的数量较多,不可能每一个都手动来,这里提供一个脚本来生成这些插入语句。

declare @name nvarchar(50)
declare @sqltable table (sqlstr nvarchar(2000)) --插入语句的临时表
declare @para nvarchar(1000) --表列名串,因为SET IDENTITY_INSERT 语句需要有列名的情况下才可以使用,这里需要将列名拼接起来
DECLARE MyCursor CURSOR 
FOR SELECT Name FROM SysObjects Where XType='U'--查询库里的所有表然后遍历 
--打开一个游标 
OPEN MyCursor
--匹配第一条记录
FETCH NEXT FROM MyCursor INTO @name
WHILE @@FETCH_STATUS =0
BEGIN

select @para = stuff((select ','+ltrim(name) from SYSCOLUMNS where ID=OBJECT_ID(@name ) 
for xml path('')),1,1,'') 
if exists (Select 1 From sysColumns Where id=object_id(@name) and Status=128)--判断是否存在标识键(一般是ID自增)
insert into @sqltable values(
'SET IDENTITY_INSERT '+@name+' ON '+'insert into '+@name+'('+@para+') select '+@para+' from [链接服务器的库]..'+@name+' SET IDENTITY_INSERT '+@name+' OFF'
)
else
insert into @sqltable values ('insert into '+@name + ' select * from [链接服务器的库]..'+@name)
FETCH NEXT FROM MyCursor INTO @name
END
--关闭游标
CLOSE MyCursor
--释放资源
DEALLOCATE MyCursor

select * from @sqltable

将查询结果全部复制出来遍可以执行了。

原文地址:https://www.cnblogs.com/mike12138/p/10253799.html
 



SQL Server表分区-水平分区3的更多相关文章

  1. SQL Server表分区-水平分区

    SQL Server表分区,sql server水平分区 转自:http://www.cnblogs.com/knowledgesea/p/3696912.html  根据时间的,直接上T-SQL代码 ...

  2. SQL Server表分区的NULL值问题

    SQL Server表分区的NULL值问题 SQL Server表分区只支持range分区这一种类型,但是本人觉得已经够用了 虽然MySQL支持四种分区类型:RANGE分区.LIST分区.HASH分区 ...

  3. SQL Server表分区【转】

    转自:http://www.cnblogs.com/knowledgesea/p/3696912.html SQL Server表分区   什么是表分区 一般情况下,我们建立数据库表时,表数据都存放在 ...

  4. SQL Server表分区详解

    原文:SQL Server表分区详解 什么是表分区 一般情况下,我们建立数据库表时,表数据都存放在一个文件里. 但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆 ...

  5. SQL Server 解读【已分区索引的特殊指导原则】(3) - 非聚集索引分区

    一.前言 在MSDN上看到一篇关于SQL Server 表分区的文档:已分区索引的特殊指导原则,如果你对表分区没有实战经验的话是比较难理解文档里面描述的意思.这里我就里面的一些概念进行讲解,方便大家的 ...

  6. SQL Server 解读【已分区索引的特殊指导原则】(1)- 索引对齐

    一.前言 在MSDN上看到一篇关于SQL Server 表分区的文档:已分区索引的特殊指导原则,如果你对表分区没有实战经验的话是比较难理解文档里面描述的意思.这里我就里面的一些概念进行讲解,方便大家的 ...

  7. SQL Server 解读【已分区索引的特殊指导原则】(2)- 唯一索引分区

    一.前言 在MSDN上看到一篇关于SQL Server 表分区的文档:已分区索引的特殊指导原则,如果你对表分区没有实战经验的话是比较难理解文档里面描述的意思.这里我就里面的一些概念进行讲解,方便大家的 ...

  8. sql server 使用 partition by 分区函数 解决不连续数字查询问题

    sql server表中的某一列数据为不一定连续的数字,但是需求上要求按照连续数字来分段显示,如:1,2,3,4,5,6,10,11,12,13, 会要求这样显示:1~6,10~13.下面介绍如何实现 ...

  9. SQL Server 表变量和临时表的区别

    SQL Server 表变量和临时表的区别 一.表变量 表变量在SQL Server 2000中首次被引入.表变量的具体定义包括列定义,列名,数据类型和约束.而在表变量中可以使用的约束包括主键约束,唯 ...

  10. SQL Server 表和索引存储结构

    在上一篇文章中,我们介绍了SQL Server数据文件的页面类型,系统通过96个字节的头部信息和系统表从逻辑层面上将表的存储结构管理起来,具体到表的存储结构上,SQL Server引入对象.分区.堆或 ...

随机推荐

  1. Java并发编程实例--5.线程睡眠

    有时候我们需要让线程在一段时间内不做任何事.例如某线程每个一小时检测一下传感器,剩余的时间不做任何事. 我们可以使用sleep()方法使线程睡眠,此期间不占用计算机资源. 这个方法接受一个整数表示睡眠 ...

  2. 我又踩坑了!如何为HttpClient请求设置Content-Type?

    1. 坑位 最近在重构认证代码,认证过程相当常规: POST /open-api/v1/user-info?client_id&timstamp&rd=12345&sign=* ...

  3. SpringBoot整合Groovy脚本,实现动态编程

    Groovy简介 Groovy 是增强 Java 平台的唯一的脚本语言.它提供了类似于 Java 的语法,内置映射(Map).列表(List).方法.类.闭包(closure)以及生成器.脚本语言不会 ...

  4. Golang Web 框架 Gin 基础学习教程集合目录

    Gin Web 框架基础学习系列目录 01-quickstart 02-parameter 03-route 04-middleware 05-log 06-logrus 07-bind 08-val ...

  5. 硬件开发笔记(二):硬件开发基本流程,制作一个USB转RS232的模块(一):开发基本过程和元器件选型

    前言   做个usb转串口,同时兼容ttl,讲述硬件模块基础的开发流程,本篇描述了全流程过程,然后选型了合适的元器件.   基本流程   以下是笔者个人从事过相关硬件研发,总结出来的流程,仅代表个人意 ...

  6. 第一百一十五篇: JS集合引用类型Map

    好家伙,本篇为<JS高级程序设计>第六章"集合引用类型"学习笔记   1.Map ECMAScript6以前,在JavaScript中实现"键/值" ...

  7. win上vscode出现undefined reference to `__imp_WSACleanup'

    示例代码 #include <iostream> // 推荐加上宏定义 #define WIN32_LEAN_AND_MEAN #include <winsock2.h> #i ...

  8. SQL之基本查询

    提纲 记录查询 使用列别名 查询语句执行顺序 数据分页 子句执行顺序 结果集排序 PS: 排序注意 多个排序字段 子句执行顺序 结果集去除重复数据 注意: 条件查询 比较运算符 注意 子句执行顺序

  9. C语言趣味编程之三天打鱼两天晒网

    include <stdio.h> typedef struct date {//定义一个日期结构体date,三个成员变量year\month\day,使得年月日作为一个整体,相互联系. ...

  10. gRPC入门学习之旅(一)

    gRpc简介 gRPC 是Google公司开发的基于HTTP/2设计,面向移动的一个高性能.开源和通用的 RPC 框架,是一款语言中立.平台中立.开源的远程过程调用(RPC)系统. gRpc官网地址: ...