SQL Server 解读【已分区索引的特殊指导原则】(2)- 唯一索引分区
一、前言
在MSDN上看到一篇关于SQL Server 表分区的文档:已分区索引的特殊指导原则,如果你对表分区没有实战经验的话是比较难理解文档里面描述的意思。这里我就里面的一些概念进行讲解,方便大家的交流。
SQL Server 解读【已分区索引的特殊指导原则】(1)
二、解读
【对唯一索引进行分区】
“对唯一索引(聚集或非聚集)进行分区时,必须从唯一索引键使用的分区依据列中选择分区依据列。此限制将使 SQL Server 只调查单个分区,以确保表中不存在重复的新键值。如果分区依据列不可能包含在唯一键中,则必须使用 DML 触发器,而不是强制实现唯一性。”
你对这段描述是否有自己的理解呢?这段话你可以这样解读:
1) “对唯一索引(聚集或非聚集)”:在创建SQL Server表结构的时候,大家很习惯的把Id值做为主键,这就是说把Id创建为唯一索引,并且是聚集索引,其实在SQL Server中这两者是可以分开的;
2) “对唯一索引(聚集或非聚集)进行分区时,必须从唯一索引键使用的分区依据列中选择分区依据列”,这句翻译的很拗口,我们来看看它的英文原文:When partitioning a unique index (clustered or nonclustered), the partitioning column must be chosen from among those used in the unique index key.假如你想创建一个唯一索引UniqueIndex([SiteId] , [Url]),并想对这个唯一索引进行分区,那么在创建索引ON选项中的分区依据列必须是UniqueIndex([SiteId] , [Url])中[SiteId] 和 [Url]这2个字段的子集([Url]或者[SiteId]或者[Url]+[SiteId])。为什么会有这样的要求呢?请看下面的解读。
3) “此限制将 使 SQL Server 只调查单个分区,以确保表中不存在重复的新键值”,这句的意思是:假设UniqueIndex([SiteId] , [Url])索引是以SiteId作为分区依据列,那么某个SiteId值只会属于某单一的分区中,这样才能保证([SiteId] , [Url])这两个字段在单个分区是唯一就表示了在整个表是也是唯一的;再假设:如果上面的唯一索引UniqueIndex([SiteId] , [Url])是以Id作为分区依据列的,那么你怎么确保各个单个分区里的数据在整个表中是唯一的呢?数据库是没有办法的。SQL Server是想偷懒,它想当判断了某个分区的唯一索引在这个是唯一就可以省事很多,不需要去全局整个表判断,这样是不是省事很多?
4) “如果分区依据列不可能包含在唯一键中,则必须使用 DML 触发器,而不是强制实现唯一性。”上面的所有描述都是有一个前提的,那就是你希望索引与基表对齐,如果在不用对齐的情况下,你可以使用DML触发器,或者单独一个文件组来存放唯一索引,如果这样,你就不能使用分区切换了。
三、参考文献
->已分区索引的特殊指导原则(唯一索引)
Special Guidelines for Partitioned Indexes
SQL Server 解读【已分区索引的特殊指导原则】(2)- 唯一索引分区的更多相关文章
- SQL Server 解读【已分区索引的特殊指导原则】(1)- 索引对齐
一.前言 在MSDN上看到一篇关于SQL Server 表分区的文档:已分区索引的特殊指导原则,如果你对表分区没有实战经验的话是比较难理解文档里面描述的意思.这里我就里面的一些概念进行讲解,方便大家的 ...
- SQL Server 解读【已分区索引的特殊指导原则】(3) - 非聚集索引分区
一.前言 在MSDN上看到一篇关于SQL Server 表分区的文档:已分区索引的特殊指导原则,如果你对表分区没有实战经验的话是比较难理解文档里面描述的意思.这里我就里面的一些概念进行讲解,方便大家的 ...
- 【译】SQL Server索引进阶第八篇:唯一索引
原文:[译]SQL Server索引进阶第八篇:唯一索引 索引设计是数据库设计中比较重要的一个环节,对数据库的性能其中至关重要的作用,但是索引的设计却又不是那么容易的事情,性能也不是那么轻易就 ...
- SQL Server索引进阶:第八级,唯一索引
原文地址: Stairway to SQL Server Indexes: Level 8,Unique Indexes 本文是SQL Server索引进阶系列(Stairway to SQL Ser ...
- [O]SQL SERVER下有序GUID和无序GUID作为主键&聚集索引的性能表现
背景 前段时间学习<Microsoft SQL Server 2008技术内幕:T-SQL查询>时,看到里面关于无序GUID作为主键与聚集索引的建议,无序GUID作为主键以及作为聚集索引 ...
- SQL SERVER下有序GUID和无序GUID作为主键&聚集索引的性能表现
背景 前段时间学习<Microsoft SQL Server 2008技术内幕:T-SQL查询>时,看到里面关于无序GUID作为主键与聚集索引的建议,无序GUID作为主键以及作为聚集索引 ...
- SQL Server 2014新特性探秘(3)-可更新列存储聚集索引
简介 列存储索引其实在在SQL Server 2012中就已经存在,但SQL Server 2012中只允许建立非聚集列索引,这意味着列索引是在原有的行存储索引之上的引用了底层的数据,因此会 ...
- SQL SERVER 中is null 和 is not null 将会导致索引失效吗?
其实本来这个问题没有什么好说的,今天优化的时候遇到一个SQL语句,因为比较有意思,所以我截取.简化了SQL语句,演示给大家看,如下所示 declare @bamboo_Code varchar(3); ...
- SQL Server(MySql)中的联合主键(联合索引) 索引分析
最近有人问到这个问题,之前也一直没有深究联合索引具体使用逻辑,查阅多篇文章,并经过测试,得出一些结论 测试环境:SQL Server 2008 R2 测试结果与MySql联合索引查询机制类似,可以认为 ...
随机推荐
- 深入理解定时器系列——被誉为神器的requestAnimationFrame
与setTimeout和setInterval不同,requestAnimationFrame不需要设置时间间隔.这有什么好处呢?为什么requestAnimationFrame被称为神器呢?本文将详 ...
- 从倒影说起,谈谈 CSS 继承 inherit(转)
从倒影说起,谈谈 CSS 继承 inherit 给定一张有如下背景图的 div: 制作如下的倒影效果: 方法很多,但是我们当然要寻找最快最便捷的方法,至少得是无论图片怎么变化,div 大小怎么变化,我 ...
- 利用wikipedia 的API实现对其内容的查询
wikipedia提供了api可以供我们对其内容进行操作.其API文档地址为: http://en.wikipedia.org/w/api.php 列举一些常见用法: 1.全文搜索 http://en ...
- js学习笔记之标准库
在全局函数中,this等于window 在函数被作为某个对象的方法调用时,this等于那个对象. 数组的函数: 检测:Array.isArray() 转换:toString(),toLocalStr ...
- GitHub托管项目
1.进入Repositories->点击 new repositories; 2.输入Repository name 直接创建项目: 3.记录你的项目地址,如:https://github.co ...
- HDU Cow Sorting (树状数组)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2838 Cow Sorting Problem Description Sherlock's N (1 ...
- HDU 3584 Cube (三维 树状数组)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3584 Cube Problem Description Given an N*N*N cube A, ...
- 正则表达式在python中的应用
一.常用符号 . :匹配任意字符,换行符\n除外 * :匹配前一个字符0次或无限次 ? :匹配前一个字符0次货1次 .* :贪心算法 .*? :非贪心算法 () :括号内的数据作为结果返回 ...
- 《社交网络》里的评分公式——ELO排名系统
<社交网络>里的Mark Zackburg被女朋友甩后,在舍友的启发下,充分发挥了技术宅男自娱自乐的恶搞天分,做出了Facemash网站,对学校女生的相貌进行排名打分,结果网站访问流量过大 ...
- 新版startssl 免费SSL证书申请 (实测 笔记 https http2 必要条件)
简单说明: 目前多个大型网站都实现全站HTTPS,而SSL证书是实现HTTPS的必要条件之一. StartSSL是StartCom公司旗下的.提供免费SSL证书服务并且被主流浏览器支持的免费SSL.包 ...