SQL脚本整理系列一 表分区

表分区的目的:

1.把历史数据放到另外一个表里面 可以提高查询效率 当然如果经常查询历史数据和新数据的合并结果集这样做就大大的不好了

2.通过把一个表放到不同的文件,不同的文件再存储到不同的磁盘列阵中,可以提高IO速度   CPU比硬盘快多了

3.提高可用性,一个磁盘坏了,另外一个磁盘上面的文件还能用 这个对我意义不大

4.便于备份 只需要做一个分区的备份就可以了,比如云服务端,数据量比较大的就4个表单,把这四个表放在一个文件里面这样每天备份基本不花什么时间,还原也比较方便,这4个表的数据丢了意义也不大, 没有做测试

分区表的定义大体上分为三个步骤:

  1. 定义分区函数
  2. 定义分区构架
  3. 定义分区表 插入测试数据
  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(‘2002‘) AS ‘所在分区‘
UNION ALL
SELECT  $partition.pf_OrderDate(‘2003‘) AS ‘所在分区‘
UNION ALL
SELECT  $partition.pf_OrderDate(‘2004‘) AS ‘所在分区‘

--把第二部分的数据转存到历史表中

--把第二部分的数据转存到历史表中
Use Sales
go
alter table orders switch partition 2 to ordersHistory partition 2
go

--查看结果

--查看结果
SELECT * FROM Orders
SELECT * FROM dbo.OrdersHistory

时间: 2024-08-28 07:16:06

SQL脚本整理系列一 表分区的相关文章

SQL Server数据库进阶之表分区实战演练

一.课程介绍 1.1.需求背景 假设,你有一个销售记录表,记录着每个销售情况,那么你就可以把这个销售记录表按时间分成几个小表,例如说5个小表吧.2009年以前的记录使用一个表,2010年的记录使用一个表,2011年的记录使用一个表,2012年的记录使用一个表,2012年以后的记录使用一个表.那么,你想查询哪个年份的记录,就可以去相对应的表里查询,由于每个表中的记录数少了,查询起来时间自然也会减少.但将一个大表分成几个小表的处理方式,会给程序员增加编程上的难度.以添加记录为例,以上5个表是独立的5

必杀技———SQL基础整理系列(一)

SQL(Structured Query Language)——结构化查询语言 SQL语言的组成部分 数据定义语言 (DDL:Data Definition Language) 负责数据结构定义与数据库对象定义的语言,由CREATE.ALTER.DROP三个语法所组成,操作的对象包括关系表.视图.索引等. 数据操纵语言(DML: Data Manipulation Language) 其语句包括动词SELECT(查询).INSERT(添加).UPDATE(修改).DELETE(删除)表中的行.

mssql sqlserver 使用sql脚本 清空所有数据库表数据的方法分享

摘要: 下文讲述清空数据库中所有表信息的方法分享,如下所示: 实验环境:sql server 2008 实现思路: 1.禁用所有约束,外键 2.禁用所有触发器 3.删除表数据 4.开启触发器 5.开启约束 CREATE PROCEDURE proc_deleteDateSql /* 生成清除数据库表数据的脚本方法分享 */ AS EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL' EXEC sp_MSForEachTable

SQL 脚本整理 笔记

1.视图 存储过程 触发器 批量加密(With Encryption),单个解密 在运行过程中自己找不到启用DAC 的地方,链接的时候需要在服务器名称前面添加ADMIN:,如本机是ADMIN:WP-PC 另外加密后的对象可以用SQL prompt 直接单独查看,所以意义不是很大:防一些不懂的人吧,亲测可以使用: 网络上面有2000的,我自己测试在2008R2,作者本人在2012上面测试也是OK的 --加密存储过程  可以批量加密参数All 或者单个加密  已经加密的会有提示 Use master

9、SQL基础整理(两表连接exists,join on,union)

exists的用法 select *from haha where exists (select *from bumen where bumen.code = haha.bumen and bumen.name = '销售部' )and age>35 (运行方法为逐条查询) select name,sex,age,(select name from bumen where bumen.code = haha.bumen)as 部门 from haha select name,sex,age,(s

[转] 使用SQL脚本查看表空间使用率和使用dba_tablespace_usage_metrics视图的区别

传统的SQL脚本查看表空间使用率,使用的关键视DBA_DATA_FILE和DBA_FREE_SPACE.Oracle 11g引入了DBA_TABLESPACE_USAGE_METRICS视图.事实上,Oracle 10g中就已经引入了该视图,可以使用,但在10g官方文档中查不到,11g官方文档对该视图作了说明. Oracle 11g 官方文档中对DBA_TABLESPACE_USAGE_METRICS视图的说明: DBA_TABLESPACE_USAGE_METRICS describes ta

Sql Server来龙去脉系列之二 框架和配置

数据库对象 数据库维持了一系列表存储所有对象.数据类型/约束/配置项/资源等,在2008种我们叫他们为system base tables,并且这些表我们默认是看不到的.我们可以通过管理员登陆数据库,然后执行脚本: USE master; SELECT name FROM sys.objects WHERE type_desc = 'SYSTEM_TABLE'; 能查看到几十条数据.一般我们是不能查看到这些表里边的任何数据,只有通过DAC方式连接数据库才能查看到数据.这些数据主要被数据库引擎使用

Sql Server来龙去脉系列之三 查询过程跟踪

我们在读写数据库文件时,当文件被读.写或者出现错误时,这些过程活动都会触发一些运行时事件.从一个用户角度来看,有些时候会关注这些事件,特别是我们调试.审核.服务维护.例如,当数据库错误出现.列数据被更新.CPU占用过高等,跟踪这些状态是非常有用地. 本章节覆盖了事件系统的关键区域:触发器.事件通知器.改变跟踪.SQL跟踪.扩展事件等.这些事件都有一个相似目的:响应或者记录发生的事件.但每一中事件的工作方式又不一样. 基础:触发器和事件通知器 触发器非常多,Data Manipulation La

Sql Server来龙去脉系列之一 目录篇

不要做一个只懂数据库查询的程序猿,学习数据库我们不要只知其一不知其二.之前看了下<Microsoft SQL Server 2008 Internals>,才知道数据库是怎么样的架构以及数据库使用了哪些网络传输协议,受益不浅值得自己花时间继续去深入研究,也推荐这本书给需要学习数据库的同学看.另外,给大家分享下这两天学习的一些心得:学.NET就得好好看msdn. 之前在博客园看了很多介绍ASP.NET在IIS的运行管道的文章,但我自己觉得还是msdn描述的最直接 (https://msdn.mi