一、前言

在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)- 唯一索引分区的更多相关文章

  1. SQL Server 解读【已分区索引的特殊指导原则】(1)- 索引对齐

    一.前言 在MSDN上看到一篇关于SQL Server 表分区的文档:已分区索引的特殊指导原则,如果你对表分区没有实战经验的话是比较难理解文档里面描述的意思.这里我就里面的一些概念进行讲解,方便大家的 ...

  2. SQL Server 解读【已分区索引的特殊指导原则】(3) - 非聚集索引分区

    一.前言 在MSDN上看到一篇关于SQL Server 表分区的文档:已分区索引的特殊指导原则,如果你对表分区没有实战经验的话是比较难理解文档里面描述的意思.这里我就里面的一些概念进行讲解,方便大家的 ...

  3. 【译】SQL Server索引进阶第八篇:唯一索引

    原文:[译]SQL Server索引进阶第八篇:唯一索引     索引设计是数据库设计中比较重要的一个环节,对数据库的性能其中至关重要的作用,但是索引的设计却又不是那么容易的事情,性能也不是那么轻易就 ...

  4. SQL Server索引进阶:第八级,唯一索引

    原文地址: Stairway to SQL Server Indexes: Level 8,Unique Indexes 本文是SQL Server索引进阶系列(Stairway to SQL Ser ...

  5. [O]SQL SERVER下有序GUID和无序GUID作为主键&聚集索引的性能表现

     背景 前段时间学习<Microsoft SQL Server 2008技术内幕:T-SQL查询>时,看到里面关于无序GUID作为主键与聚集索引的建议,无序GUID作为主键以及作为聚集索引 ...

  6. SQL SERVER下有序GUID和无序GUID作为主键&聚集索引的性能表现

     背景 前段时间学习<Microsoft SQL Server 2008技术内幕:T-SQL查询>时,看到里面关于无序GUID作为主键与聚集索引的建议,无序GUID作为主键以及作为聚集索引 ...

  7. SQL Server 2014新特性探秘(3)-可更新列存储聚集索引

    简介      列存储索引其实在在SQL Server 2012中就已经存在,但SQL Server 2012中只允许建立非聚集列索引,这意味着列索引是在原有的行存储索引之上的引用了底层的数据,因此会 ...

  8. SQL SERVER 中is null 和 is not null 将会导致索引失效吗?

    其实本来这个问题没有什么好说的,今天优化的时候遇到一个SQL语句,因为比较有意思,所以我截取.简化了SQL语句,演示给大家看,如下所示 declare @bamboo_Code varchar(3); ...

  9. SQL Server(MySql)中的联合主键(联合索引) 索引分析

    最近有人问到这个问题,之前也一直没有深究联合索引具体使用逻辑,查阅多篇文章,并经过测试,得出一些结论 测试环境:SQL Server 2008 R2 测试结果与MySql联合索引查询机制类似,可以认为 ...

随机推荐

  1. mac新手的烦恼

    最近新换了mac,我换mac并非自愿.无论mac的性能有多好,我依然讨厌使用appstore下载软件的感觉,尤其在我一遍又一遍忘记自己的appID的时候.无奈我的thinkpad常常死机,最近又常倒腾 ...

  2. swift-Array(数组)

    Swift 数组用于存储相同类型的值的顺序列表.Swift 要严格检查,不允许不同类型的值在同一个数组中 声明一个数组 var someArray = [SomeType]() var someArr ...

  3. Windows服务安装

    运行cmd 输入:cd C:\Windows\Microsoft.NET\Framework\v4.0.30319  按回车 输入安装服务路径:如(installutil.exe D:\Project ...

  4. 4_jquery

    官网:www.jquery.com 兼容: 1.jquery-3.1.0.js :form.attr("checked","false")无效 2.firefo ...

  5. javascript keycode大全

    keycode    8 = BackSpace BackSpacekeycode    9 = Tab Tabkeycode   12 = Clearkeycode   13 = Enterkeyc ...

  6. Hello Bugs

    2014-01-09 [Maven]Not Authorized ReasonPhame: Failed to decrypt password... 描述:eclipse中使用maven进行mvn ...

  7. xml中DTD解析

    DTD的作用是"文档类型的定义" DTD申明始终以<!DOCTYPE开头(开头后空一格). 本标签一共有三种写法 一.内部DTD: <!DOCTYPE 根元素 [ 文档 ...

  8. C#中常用的读取xml的几种方法(转)

    本文完全来源于http://blog.csdn.net/tiemufeng1122/article/details/6723764,仅作个人学习之用. XML文件是一种常用的文件格式,例如WinFor ...

  9. Mybatis generator的使用

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration ...

  10. C#:获取设备电量相关信息

    更多资源:http://denghejun.github.io [DllImport("kernel32.dll",EntryPoint="GetSystemPowerS ...