SQL脚本整理系列一 表分区
表分区的目的:
1.把历史数据放到另外一个表里面 可以提高查询效率 当然如果经常查询历史数据和新数据的合并结果集这样做就大大的不好了
2.通过把一个表放到不同的文件,不同的文件再存储到不同的磁盘列阵中,可以提高IO速度 CPU比硬盘快多了
3.提高可用性,一个磁盘坏了,另外一个磁盘上面的文件还能用 这个对我意义不大
4.便于备份 只需要做一个分区的备份就可以了,比如云服务端,数据量比较大的就4个表单,把这四个表放在一个文件里面这样每天备份基本不花什么时间,还原也比较方便,这4个表的数据丢了意义也不大, 没有做测试
分区表的定义大体上分为三个步骤:
- 定义分区函数
- 定义分区构架
- 定义分区表 插入测试数据
- 【把一个表的数据导入到另外一个表中 这个速度挺快的】
--创建数据库 这些操作可以在图形界面完成
--因为在自己电脑上面测试 所以都放在同一个硬盘上面了 http://www.cnblogs.com/CareySon/archive/2011/12/30/2307766.html
CREATE database Sales on primary
(
name=N'Sales',
filename=N'G:\data\Primary\Sales.mdf',
size=3MB,
maxsize=100MB,
filegrowth=10%
),--创建文件组
filegroup FG1
(
NAME = N'File1',
FILENAME = N'G:\data\FG1\File1.ndf',
SIZE = 1MB,
MAXSIZE = 100MB,
FILEGROWTH = 10%
),--创建文件组
FILEGROUP FG2
(
NAME = N'File2',
FILENAME = N'G:\data\FG2\File2.ndf',
SIZE = 1MB,
MAXSIZE = 100MB,
FILEGROWTH = 10%
),--创建文件组
FILEGROUP FG3
(
NAME = N'File3',
FILENAME = N'G:\data\FG3\File3.ndf',
SIZE = 1MB,
MAXSIZE = 100MB,
FILEGROWTH = 10%
)
LOG ON
(
NAME = N'Sales_Log',
FILENAME = N'G:\data\Primary\Sales_Log.ldf',
SIZE = 1MB,
MAXSIZE = 100MB,
FILEGROWTH = 10%
)
GO
--创建分区函数
USE Sales
GO
CREATE PARTITION FUNCTION pf_OrderDate (datetime)
AS RANGE RIGHT --以后默认就写Right 不要记混了
FOR VALUES ('2003/01/01', '2004/01/01')
GO
--建立分区架构 比如把1900-01-01-'2003/01/01'之间的数据存储到FG2里面
-- '2003/01/01'- '2004/01/01'之间的数据也存储到FG2里面
-- '2004/01/01'- 之间的数据也存储到FG3里面
--建立分区架构 比如把1900-01-01-'2003/01/01'之间的数据存储到FG2里面
-- '2003/01/01'- '2004/01/01'之间的数据也存储到FG2里面
-- '2004/01/01'- 之间的数据也存储到FG3里面
Use Sales
go
create partition scheme ps_OrderDate
as partition pf_OrderDate
to(FG2,FG2,FG3)
go
--建立表
--建立表
Use Sales
go
create table Orders --订单表
(
OrderID int identity(10000,1),
OrderDate datetime not null,
CustomerID int not null,
constraint PK_Orders primary key(OrderID,OrderDate)
)
on ps_OrderDate(OrderDate) -- 这句话决定这个表的不同之处
go
create table OrdersHistory --订单历史表 可以把不常用的数据放到这个表里面
--这样对于Orders的查询就会大大提高 有必要的时候再通过Union All 查询所有数据
(
OrderID int identity(10000,1),
OrderDate datetime not null,
CustomerID int not null,
constraint PK_OrdersHistory primary key(OrderID,OrderDate)
)
on ps_OrderDate(OrderDate)
go
--向表中插入数据
--向表中插入数据
USE Sales
GO
INSERT INTO dbo.Orders (OrderDate, CustomerID) VALUES ('2002/6/25', 1000)
INSERT INTO dbo.Orders (OrderDate, CustomerID) VALUES ('2002/8/13', 1000)
INSERT INTO dbo.Orders (OrderDate, CustomerID) VALUES ('2002/8/25', 1000)
INSERT INTO dbo.Orders (OrderDate, CustomerID) VALUES ('2002/9/23', 1000)
GO 1000 USE Sales
GO
INSERT INTO dbo.Orders (OrderDate, CustomerID) VALUES ('2003/6/25', 1000)
INSERT INTO dbo.Orders (OrderDate, CustomerID) VALUES ('2003/8/13', 1000)
INSERT INTO dbo.Orders (OrderDate, CustomerID) VALUES ('2003/8/25', 1000)
INSERT INTO dbo.Orders (OrderDate, CustomerID) VALUES ('2003/9/23', 1000)
GO 1000 GO
INSERT INTO dbo.Orders (OrderDate, CustomerID) VALUES ('2006/6/25', 1000)
INSERT INTO dbo.Orders (OrderDate, CustomerID) VALUES ('2007/8/13', 1000)
INSERT INTO dbo.Orders (OrderDate, CustomerID) VALUES ('2008/8/25', 1000)
INSERT INTO dbo.Orders (OrderDate, CustomerID) VALUES ('2009/9/23', 1000)
GO 11000
--查看结果
SELECT * FROM Orders
SELECT * FROM dbo.OrdersHistory --查看各个分区的数据行数
select $partition.pf_OrderDate(OrderDate) as Patition,COUNT(*) countRow from dbo.Orders
group by $partition.pf_OrderDate(OrderDate) --检验分区函数
SELECT $partition.pf_OrderDate('') AS '所在分区'
UNION ALL
SELECT $partition.pf_OrderDate('') AS '所在分区'
UNION ALL
SELECT $partition.pf_OrderDate('') AS '所在分区'
--把第二部分的数据转存到历史表中 把分区移动到不同的表,效率比较高消耗时间比较少
--目标分区只能是空的;必须都存在;
--必须在同一个文件组内,分区号必须相同(是指两个表公用同一个分区函数的情况下,不共用分区函数就没有范围限制了 )
--把第二部分的数据转存到历史表中
Use Sales
go
alter table orders switch partition 2 to ordersHistory partition 2
go
--查看结果
--查看结果
SELECT * FROM Orders
SELECT * FROM dbo.OrdersHistory
--创建一个新分区
--创建一个新分区
ALTER PARTITION SCHEME ps_OrderDate
NEXT USED FG3
ALTER PARTITION FUNCTION pf_OrderDate()
SPLIT RANGE ( '2007/01/01')
--检查效果 INSERT INTO dbo.Orders (OrderDate, CustomerID) VALUES ('2009/9/23', 1000)
GO 9 --查看各个分区的数据行数
select $partition.pf_OrderDate(OrderDate) as Patition,COUNT(*) countRow from dbo.Orders
group by $partition.pf_OrderDate(OrderDate)
--删除一个分区
--移除分区
ALTER PARTITION FUNCTION pf_OrderDate()
MERGE RANGE ( '2004/01/01')
--检查移除效果
--检查移除效果
SELECT $partition.pf_OrderDate('') AS '所在分区'
UNION ALL
SELECT $partition.pf_OrderDate('') AS '所在分区'
UNION ALL
SELECT $partition.pf_OrderDate('') AS '所在分区'
UNION ALL
SELECT $partition.pf_OrderDate('') AS '所在分区'
-- 移除分区函数 分区方案
a。删除源表 再删除分区函数 分区方案
truncate table name1
drop table name1
DROP PARTITION SCHEME name1
DROP PARTITION FUNCTION name1
b。如果是没有聚集索引的表
可以通过重新建立索引而不引用分区方案的方式来
SQL脚本整理系列一 表分区的更多相关文章
- SQL脚本整理系列 三
触发器 SQL 2008 怎么实现删除学生表里面的一条记录,成绩表里面关于这个学生的记录也同时删掉,谢求具体代码 --创建表 DROP TABLE tstudent GO CREATE TABLE t ...
- SQL脚本整理系列一 分隔函数
原来效果: fName Scroe 王某某 ,, 李某某 , 王某某 李某某 李某某 ,, 王某某 执行后效果: name score 李某某 李某某 李某某 王某某 王某某 王某某 王某某 王某某 ...
- 必杀技———SQL基础整理系列(一)
SQL(Structured Query Language)——结构化查询语言 SQL语言的组成部分 数据定义语言 (DDL:Data Definition Language) 负责数据结构定义与数据 ...
- mssql sqlserver 使用sql脚本 清空所有数据库表数据的方法分享
摘要: 下文讲述清空数据库中所有表信息的方法分享,如下所示: 实验环境:sql server 2008 实现思路: 1.禁用所有约束,外键 2.禁用所有触发器 3.删除表数据 4.开启触发器 5.开启 ...
- SQL 脚本整理 笔记
1.视图 存储过程 触发器 批量加密(With Encryption),单个解密 在运行过程中自己找不到启用DAC 的地方,链接的时候需要在服务器名称前面添加ADMIN:,如本机是ADMIN:WP-P ...
- mysql数据库——特殊sql语句整理之修改表结构
建表 先讲一下常规建表: CREATE TABLE testCreate ( id ) NOT NULL auto_increment, time ) NOT NULL, type ) NOT NUL ...
- 9、SQL基础整理(两表连接exists,join on,union)
exists的用法 select *from haha where exists (select *from bumen where bumen.code = haha.bumen and bumen ...
- SQL Server2005 表分区三步曲(zz)
前言 SQL Server 2005开始支持表分区,这种技术允许所有的表分区都保存在同一台服务器上.每一个表分区都和在某个文件 组(filegroup)中的单个文件关联.同样的一个文件/文件组可以容纳 ...
- [转] 使用SQL脚本查看表空间使用率和使用dba_tablespace_usage_metrics视图的差别
传统的SQL脚本查看表空间使用率,使用的关键视DBA_DATA_FILE和DBA_FREE_SPACE. Oracle 11g引入了DBA_TABLESPACE_USAGE_METRICS视图.其实, ...
随机推荐
- strcmp返回值布尔类型的判断
strcmp: 用于比较两个字符串,原型如下: int strcmp ( char const *s1, char const *s2):如果s1小于s2,strcmp函数返回一个小于零的值.如果s1 ...
- 第一篇 Python的数据类型
Python的标准数据类型有五种: (1)字符串 (2)数字(包括整数,浮点数,布尔,复数) (3)列表(list) (4)元组(tuple) (5)字典(dict) 注:使用type函数可以查看对象 ...
- 基于CAS的单点登录实战(1)-- 搭建cas服务器
公司有几个系统想做SSO,然后开始研究cas.系统是Centos7 搭建CAS服务器 cas的版本比较多,先在网上搜了一下各种教程配置经验.本来想搭建最新的CAS版本,然而为了快速部署,选择了网上教程 ...
- golang文件处理函数openfile与linux系统的文件函数的耦合
golang运行最理想的环境是linux系统中,编译速度和执行速度都比较快,本文是关于golang中的文件操作函数 在golang标准库中os包提供了不依赖平台的借口,但是使用的风格是unix风格的. ...
- docker概述及基础操作
docker概述 容器技术已经成为应用程序封装和交付的核心技术容器技术的核心有以下几个内核组成CGroups-资源管理NamsSpace-进程管理SElinux-安全 由于是在物理机上实施隔离,启动一 ...
- Django 实现购物车功能
购物车思路:使用 session 功能识别不同浏览器用户,使得用户不管是否登录了网站,均能够把想要购买的产品放在某个地方,之后随时可以显示或修改要购买的产品,等确定了之后再下订单,购物车可以用来暂存商 ...
- linux防火墙(四)—— SNET和DNET原理及应用
图(1) 一.SNAT策略 应用环境:局域网主机共享单个公网IP地址接入Internet,简单的说就是企业内部局域网想访问外部服务器时,网关型防火墙需要开启的SNAT应用策略. SNAT策略原理:网关 ...
- request对象常用方法
String getParameter(String name)根据表单组件名称获取提交数据 Sring[] getParameterValues(String name)获取表单组件对应多个值时的请 ...
- UML之时序图详解
原文链接:https://blog.csdn.net/fly_zxy/article/details/80911942 什么是时序图 时序图(Sequence Diagram),又名序列图.循序图,是 ...
- 使用github和hexo搭建静态博客
获得更多资料欢迎进入我的网站或者 csdn或者博客园 终于写这篇文章了,这是我使用github和hexo搭建博客的一些心得,希望能给大家一点帮助.少走点弯路.刚接触github,只是用来存项目的版本, ...