原文链接:传送门

通用碎片模式

如果一个表具有多个索引,那么这些索引便具有多个索引键,因而也具有不同的顺序。通常情况下,这些索引中的一两个展示了之前描述过的升序插入模式,而其他的通常展示了随机插入模式。

升序插入模式的候选索引包括那些最左边的索引列具有如下特征的列:

  • 按年月的列,比如TransactionDate。
  • 具有身份标识属性的列
  • 一个带有NewSequentialId() 默认约束的唯一性标识列

当把插入和删除考虑进来时,五种通用的碎片模式复现了出来,它们中的四种会从索引维护中受益。本章的稍后会对其进行讲解,并在下一章“创建/修改/删除”对其进行进一步详细的分析。

升序插入-升序删除

升序插入-随机删除

随机插入-周期删除

随机插入-随机删除

大规模插入-无删除

预防和修复索引碎片和页分裂

本进阶系列的下一章节讨论了两种索引维护的选择,索引重建,它减少了外部碎片并使你能够对重建索引的页充满率进行控制,索引重新组织,它减少了外部碎片并增加了页的充满率。本章为了简便起见,我们使用了短语“重建索引”,你的特定的情况会决定索引重建,或者索引重新组织,哪个是更合适的选择。

本章最后一部分我们的目标是使你理解进行索引优化时你必须要有的目标。那个目标是:产生一个具有最佳的列覆盖率,最少数量的外部碎片,并在可见的未来最少的页分裂的索引。

第一个例子:

第二个例子:

第三个例子:

第四个例子:

结论

碎片可以是内部碎片也可以是外部碎片

内部碎片指的是索引页内部留下的空余空间。

外部碎片指的是索引页的逻辑顺序与物理存储位置的背离。

外部碎片能够减慢索引扫描的性能,但它对于基于一个索引键返回少量的数据行不产生影响。

内部碎片增加了索引的大小。

页分裂需要额外的开销并且导致了外部碎片,不必要的页分裂应该被避免。避免页分裂和外部碎片的最好方式是周期性的重建/重组织索引,以产生具有最佳页覆盖率,最少数量的外部碎片,以及在可见的将来具有最少数量页分裂数的索引。

【完】

【译】索引进阶(十三):SQL SERVER中的索引碎片【下篇】的更多相关文章

  1. c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程

    c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...

  2. T-SQL查询进阶--理解SQL Server中索引的概念,原理以及其他

    简介 在SQL Server中,索引是一种增强式的存在,这意味着,即使没有索引,SQL Server仍然可以实现应有的功能.但索引可以在大多数情况下大大提升查询性能,在OLAP中尤其明显.要完全理解索 ...

  3. T-SQL查询进阶--理解SQL Server中索引的概念,原理

    简介 在SQL Server中,索引是一种增强式的存在,这意味着,即使没有索引,sql server仍然可以实现应有的功能,但索引可以在大多数情况下提升查询性能,在OLAP(On line Trans ...

  4. SQL Server中的索引

    1 SQL Server中的索引 索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度.索引包含由表或视图中的一列或多列生成的键.这些键存储在一个结构(B 树)中,使 SQL Serve ...

  5. 转载: SQL Server中的索引

    http://www.blogjava.net/wangdetian168/archive/2011/03/07/347192.html 1 SQL Server中的索引 索引是与表或视图关联的磁盘上 ...

  6. 【转】T-SQL查询进阶—理解SQL Server中的锁

      简介 在SQL Server中,每一个查询都会找到最短路径实现自己的目标.如果数据库只接受一个连接一次只执行一个查询.那么查询当然是要多快好省的完成工作.但对于大多数数据库来说是需要同时处理多个查 ...

  7. T-SQL查询进阶—理解SQL Server中的锁

    在SQL Server中,每一个查询都会找到最短路径实现自己的目标.如果数据库只接受一个连接一次只执行一个查询.那么查询当然是要多快好省的完成工作.但对于大多数数据库来说是需要同时处理多个查询的.这些 ...

  8. sql server中的索引详情

    什么是索引 拿汉语字典的目录页(索引)打比方:正如汉语字典中的汉字按页存放一样,SQL Server中的数据记录也是按页存放的,每页容量一般为4K .为了加快查找的速度,汉语字(词)典一般都有按拼音. ...

  9. 【译】索引进阶(十二):SQL SERVER中的索引碎片【中篇】

    原文链接:传送门. 为了讨论碎片产生的原因,以及避免和移除索引碎片的技术,我们必须从本进阶系列后续将介绍的两个章节借用一些知识点:创建/更新索引的知识,以及向一个索引表插入数据行的相关知识. 当我们讲 ...

随机推荐

  1. Xcode: Run Script 的运用, 使build打包后自动+1

    背景: 每次打包都要build+1处理,比较麻烦,使用 Run Script 的运用使build打包后自动+1 0. 使用xcode 添加run Script 然后就可以添加Run Script了 1 ...

  2. webmagic保存数据

    使用多线程:

  3. vue配置jquery和bootstarp

    jquery: 1.npm install jquery --save-dev 引入jquery. 2.在webpack.base.conf.js中添加如下内容: var webpack = requ ...

  4. CSS高度塌陷问题与解决办法

    问题描述: 在文档流中,父元素默认被子元素撑开(父多高子多高),一旦子浮动,脱离文档流,父无撑起元素便塌陷,父下的所有元素会上移. (不推荐)可以将父高度写死避免塌陷,但高度写死后,父高度不能自动适应 ...

  5. BZOJ2406矩阵——有上下界的可行流+二分答案

    题目描述 输入 第一行两个数n.m,表示矩阵的大小. 接下来n行,每行m列,描述矩阵A. 最后一行两个数L,R. 输出 第一行,输出最小的答案: 样例输入 2 2 0 1 2 1 0 1 样例输出 1 ...

  6. Linux 系统从入门到精通的学习大纲;

    以前没有接触过Linux,生产环境需要,有时候遇到问题,百度一下,问题解决了,在遇到问题,在百度,有时候问题是如何解决的,为什么会解决有点丈二的和尚摸不着头脑, 为此,想用一段时间,系统的学习下Lin ...

  7. Java 获取当前线程、进程、服务器ip

    /** * 获取当前线程id */ private Long getThreadId() { try { return Thread.currentThread().getId(); } catch ...

  8. Mac 使用 OpenMP/Clang

    新建 hello.cpp 文件: #include <omp.h> #include <stdio.h> int main() { #pragma omp parallel p ...

  9. Linux-ftp虚拟用户配置

    云服务器ESC 部署vsftpd 虚拟用户 说明:云服务器部署和本地服务器部署一样,都需要开通指定的相应端口,只不过云服务器需要在安全组规则中打开相应的端口允许通过. 环境说明: 对应的用户对应不同的 ...

  10. (八)控件介绍,QLable

    Radio单选框 默认互斥,加GroupBox进行分组可以解决这个 checkBox复选 ListWidget TableWIdget:有表头 #include "widget.h" ...