当数据库表中数据量能够被预测到将会非常大,或者已经拥有庞大的数据时,我们应该选择分表或者分区(即使用多个数据库)来解决数据访问时的性能问题。
为什么要分区分表呢?因为分区分表有如下几个有点:
1.改善查询性能,对分区对象的查询可以仅搜索自己关系的分区,提高检索速度。
2.
增强可用性,如果表的某个分区出现故障,表在其他分区的数据仍然可用。
3.
维护方面,如果表的某个分区出现故障,需要修复数据,只修复该分区即可。
4.
均衡I/O,可以把不同的分区映射到磁盘以平衡I/O,改善整个性能。
--数据库添加文件组
alter database testdb add filegroup day_20180427;
alter database testdb add filegroup day_20180428;
alter database testdb add filegroup day_20180429;
alter database testdb add filegroup day_20180430;
--文件组添加文件
alter database testdb
add file(name=N'day_20180427',filename='C:\DB\test_partition\day_20180427.ndf',
size=5mb, filegrowth=5mb) to filegroup day_20180427;
alter database testdb
add file(name=N'day_20180428',filename='C:\DB\test_partition\day_20180428.ndf',
size=5mb, filegrowth=5mb) to filegroup day_20180428;
alter database testdb
add file(name=N'day_20180429',filename='C:\DB\test_partition\day_20180429.ndf',
size=5mb, filegrowth=5mb) to filegroup day_20180429;
alter database testdb
add file(name=N'day_20180430',filename='C:\DB\test_partition\day_20180430.ndf',
size=5mb, filegrowth=5mb) to filegroup day_20180430;
--创建分区函数
use testdb;
--drop partition function F_Date_Day;
create partition function F_Date_Day(datetime)
as range right for values
('2018-04-28','2018-04-29','2018-04-30');
--创建分区方案
--drop partition scheme P_Date_Day;
create partition scheme P_Date_Day
as partition F_Date_Day
to(day_20180427,day_20180428,day_20180429,day_20180430);
--在分区方案上创建表
CREATE TABLE [dbo].[test_part](
[ID] [int] identity(1,1),
[empno] [int] NULL,
[jointime] [datetime] NULL
)on P_Date_Day(jointime);
--在分区方案上创建表索引
CREATE CLUSTERED INDEX [ClI_testpart_jointime] ON [dbo].[test_part]
(
[jointime] ASC
)on P_Date_Day(jointime);
--对表数据进行页压缩
USE [testdb];
ALTER TABLE [dbo].[test_part] REBUILD PARTITION = 1 WITH(DATA_COMPRESSION=PAGE);
ALTER TABLE [dbo].[test_part] REBUILD PARTITION= 2 WITH(DATA_COMPRESSION=PAGE);
ALTER TABLE [dbo].[test_part] REBUILD PARTITION= 3 WITH(DATA_COMPRESSION=PAGE);
ALTER TABLE [dbo].[test_part] REBUILD PARTITION= 4 WITH(DATA_COMPRESSION=PAGE);