一、概念

1. 分区视图

  分区视图,通常是设计人员在设计数据库时考虑的因素。分区视图在一台或多台服务器间水平连接一组成员表中的分区数据,使数据看起来就像来自一个表。

2. 分类

  SQL Server 可以分为2类:

(1)本地分区视图

  在本地分区视图中,所有参与表和视图都位于同一个 SQL Server 实例上。

(2)分布式分区视图

  分布式分区视图用于实现数据库服务器联合。联合体是一组分开管理的服务器,但它们相互协作分担系统的处理负荷。通过这种通过分区数据形成数据库服务器联合体的机制可以向外扩展一组服务器,以支持大型的多层网站的处理需要。

  在分布式分区视图中,至少有一个参与表位于不同的(远程)服务器上。分布式分区视图可用于在一组服务器间分布系统的数据库处理负荷。

3. 更新分区视图

  分区视图即可以作为基础表read-only副本的视图,也可以更新分区视图的数据。要在分区视图上执行更新,分区依据列必须是基表主键的一部分。如果视图不可更新,可以对允许更新的视图创建 INSTEAD OF 触发器。应该在触发器中设计错误处理以确保不会插入重复的行。

  注意:bcp 命令、BULK INSERT 和 INSERT ... SELECT * FROM OPENROWSET(BULK...) 语句均不支持向分区视图进行大容量导入。但是,可以使用 INSERT 语句在分区视图中插入多个行。

二、创建分区视图

1. 设计方法

  下面以一个销售订单为例来说明。

  在上图中,分别用4张表将销售订单进行水平分区,这4张表都有完全相同的表结构和主键。当表中超过几百万条记录时,这种分区的优势就很明显。

  在上例中,如果只需查询本月订单时,就只需要查询一张表。为了能够查询包括历史订单在内的所有订单,就需要使用以下语句创建一个分区视图。

CREATE VIEW 所有销售订单
AS
SELECT * FROM 本月订单表
UNION ALL
SELECT * FROM 本季度其它订单表
UNION ALL
SELECT * FROM 本年度其它订单表
UNION ALL
SELECT * FROM 其它年度订单表

2. 查询方法

  SQL Server 查询优化器可以通过Check约束识别 SELECT 语句中其搜索条件,并根据主键仅引用相应的基表中的行。因此,它将其搜索范围限制在这些表。

SELECT * FROM 所有销售订单
WHERE 订单年份 = 2013   and   订单月份=7

3. 限制

  分区视图返回正确的结果并不一定需要 CHECK 约束。但是,如果未定义 CHECK 约束,则查询优化器必须搜索所有表,而不是只搜索符合分区依据列上的搜索条件的表。

  如果不使用 CHECK 约束,则视图的操作方式与使用 UNION ALL 的任何其他视图相同。查询优化器不能对存储在不同表中的值作出任何假设,也不能跳过对参与视图定义的表的搜索。

CREATE TABLE 本月订单表
  (订单编号      INT,
   客户编号      INT      NOT NULL,
   订单年份      INT     CHECK (订单年份 = 2013),
   订单月份      INT     CHECK (订单月份 = 7),
   订单日期      DATETIME      NULL      CHECK(DATEPART(yy, 订单日期) =2013 and DATEPART(mm, 订单日期) = 7 )
   CONSTRAINT OrderIDYearMonth PRIMARY KEY(订单编号, 订单年份, 订单月份)
   )

三、垂直分区

1. 设计方法

  水平分区的设计原理是将大的表拆分存储到多个小表,这些表都具有相同的结构和主键。但是在某些情况下,这些小表还需要进一步拆分。

  例如,一个表的记录宽度比较宽,每一行记录为4600字节,每一页(8KB)只能存储1条记录。而实际业务中频繁查询的只是该表中的某几列。这时候,垂直分区的优势就体现出来了。

  在上例中,将一个大型表拆分成无数个小型表,有效地节约磁盘存储空间。在读取或更新数据时,只需要访问所需的列所在的表,无需访问其他表,有利于性能提升。同时,由于分开存储在多个小型表中,锁的粒度也减小了。

2. 查询方法

  需要同时读取拆分后的所有小型表时,可以使用视图。

CREATE VIEW 客户资料
AS
SELECT 客户资料主表.*,  客户资料辅表1.*, 客户资料辅表2.* 
FROM 客户资料主表
JOIN 客户资料辅表1 ON 客户资料主表.客户编号=客户资料辅表1.客户编号
JOIN 客户资料辅表2 ON 客户资料主表.客户编号=客户资料辅表2.客户编号

本文结语:

  通过对表进行水平或垂直分区,使频繁访问的表占用最少的磁盘空间,提高访问效率。当需要访问分区的所有数据时,可以通过创建视图(包含Union或Join子句)实现。

四、物理优化(4)分区视图相关推荐

  1. mysql的高阶用法_MySQL的经典用法(十四)-高级优化

    mysql的经典用法(十四)----高级优化 基于 /application/search/mysql/mysql-5.5.28/support-files/my-innodb-heavy-4G.cn ...

  2. MySQL优化四(优化表结构)

    MySQL优化四(优化表结构) MySQL优化四(优化表) 昨晚吃吃喝喝的太多,熬夜到凌晨二点.今天头发杂乱,脸庞憔悴,像是吸毒了.下午去买衣服,肚子一看大了不少.奈何女朋友还没有一个,就已经发福了. ...

  3. 三种快排及四种优化方式

    本文是转载文章,文章的来源:csdn博客 博主:silentsharer 文章: 三种快排及四种优化方式 博文地址:https://blog.csdn.net/hacker00011000/artic ...

  4. Linux 探索之旅 | 第一部分第四课:磁盘分区 + 完成 Ubuntu 安装

    -- 作者 谢恩铭 转载请注明出处 内容简介 第一部分第四课:磁盘分区+完成Ubuntu安装 第一部分第五课预告:Unity桌面,人生若只如初见 磁盘分区+完成Ubuntu安装 上一课Linux探索之 ...

  5. ListView的四种优化方式

    ListView的四种优化方式 优化方式一: convertView的复用   第一种优化就是重用convertView,这也是最简单的一种优化方式,就是在Adapter类的getView方法中通过判 ...

  6. 【Linux探索之旅】第一部分第四课:磁盘分区,并完毕Ubuntu安装

    内容简单介绍 1.第一部分第四课:磁盘分区,并完毕Ubuntu安装 2.第一部分第五课预告:Unity桌面,人生若仅仅如初见 磁盘分区 上一课我们正式開始安装Ubuntu了.可是到了分区的那一步.小编 ...

  7. 分区视图(转自小春BOOK)

    SQL SERVER的分区视图给我们提供了一种实现大数据量管理的方法,类似于其它数据库管理系统的分区视图.不仅实现了表的集中管理,而且实现了数据的快速定位.下边我就以一个日志记录表为例来说以下分区视图 ...

  8. sql优化之物理优化

    在单机数据库系统中进行优化.面临的问题,比如说给定一个要query的sql语句,查询优化算法的目标就是找到查询的一个具有最小执行花费的执行计划,如果找到了,那么这样的执行计划一定具有最快的响应时间. ...

  9. pytorch梯度下降函数_Pytorch中常用的四种优化器SGD、Momentum、RMSProp、Adam

    来源:AINLPer微信公众号 编辑: ShuYini 校稿: ShuYini 时间: 2019-8-16 引言     很多人在使用pytorch的时候都会遇到优化器选择的问题,今天就给大家介绍对比 ...

最新文章

  1. Zookeeper集群配置
  2. 分布式事务终极解决方案探讨
  3. c#读取Sybase中文乱码的解决办法
  4. html外边距的复合属性是,margin
  5. Redis单机部署、添加开机自启、配置参数
  6. XGBClassifier()特征选择
  7. 信息管理系统 github_Java+MySQL实现学生信息管理系统
  8. docker-for-windows配置了阿里云镜像,仍然无法获得链接:(Client.Timeout exceeded while awaiting headers)
  9. 12.分布式定时任务(xxl-job)
  10. 【声明】本人博客已经迁移到博客园,欢迎访问!
  11. iphone和ipad的一些区别
  12. LINUX(socket)网络编程部分头文件归纳解释
  13. 初来乍到,余生请多指教
  14. 基于聚类算法的图像分割技术
  15. 大型医院HIS系统源码 优质源码 医院管理系统源码
  16. 【C语言】*p++与(*p)++的区别
  17. HarmonyOS实战 —基于hi3861芯片鸿蒙2.0的避坑指南
  18. 基于php学生信息管理系统设计
  19. BOOL与bool TRUE与true FALSE与false 区别
  20. 六个经典的PHP加密解密算法

热门文章

  1. Elasticsearch--进阶-term_keyword查询---全文检索引擎ElasticSearch工作笔记015
  2. 数据库零碎要点002---认识时序数据库
  3. 数据库工作笔记002---新建mysql数据库的时候_对字符集和排序规则的选择
  4. C/C++网络编程工作笔记0002---网络编程流程
  5. 正则表达式学习笔记011--贪婪和懒惰的匹配
  6. C#.NET验证码智能识别学习笔记---06 解决java jre问题:JTessBoxEditor.jar打开的时报找不到或无法加载主类 com.sun.tools.javac.Main错误
  7. EJB3.0学习笔记---JMS/MDB/Pub/Sub/P2P
  8. 杭电1874畅通工程续
  9. javascript中五种常见的DOM方法
  10. java中criteria类_java – Criteria API:按类类型过滤