简介
在SQL Server中,存储数据的最小单位是页,每一页所能容纳的数据为8060字节,而页的组织方式是通过B树结构(表上没有聚集索引则为堆结构)
在聚集索引B树中,只有叶子节点实际存储数据,而其他根节点和中间节点仅仅用于存放查找叶子节点的数据
每一个叶子节点为一页, SQL Server向每个页内存储数据的最小单位是表的行(Row)。叶子节点中新插入的行或更新的行使得叶子节点无法容纳当前更新或者插入的行时,分页就产生了.在分页的过程中,就会产生碎片
理解外部碎片
外部碎片指的是由于分页而产生的碎片.比如,我想在现有的聚集索引中插入一行,这行正好导致现有的页空间无法满足容纳新的行。从而导致了分页

新的页是随着数据的增长不断产生的,而聚集索引要求行之间连续,所以很多情况下分页后和原来的页在磁盘上并不连续。这就是所谓的外部碎片

理解内部碎片

我们创建一个表,这个表每个行由int(4字节),char(999字节)和varchar(0字节组成),所以每行为1003个字节,则8行占用空间1003*8=8024字节加上一些内部开销,可以容纳在一个页面中

当我们随意更新某行中的col3字段后,造成页内无法容纳下新的数据,从而造成分页

而当分页时如果新的页和当前页物理上不连续,则还会造成外部碎片
内部碎片和外部碎片对查询性能的影响
1.  由于分页会导致数据在页之间的移动,所以如果插入更新等操作经常需要导致分页,则会大大提升IO消耗,造成性能下降
2. 比页更大的单位是区(Extent).一个区可以容纳8个页.区作为磁盘分配的物理单元.所以当页分割如果跨区后,需要多次切区。需要更多的扫描.因为读取连续数据时会不能预读,从而造成额外的物理读,增加磁盘IO
对于碎片的解决方法
基本上所有解决办法都是基于对索引的重建和整理,只是方式不同
重建索引固然可以解决碎片的问题.但是重建索引的代价不仅仅是麻烦,还会造成阻塞。影响使用.而对于数据比较少的情况下,重建索引代价并不大。而当索引本身超过百兆的时候。重建索引的时间将会很让人蛋疼
理解填充因子
填充因子为0(0和100表示的是一个概念),则表示页面可以100%使用。所以会遇到前面update或insert时,空间不足导致分页.通过设置填充因子,可以设置页面的使用程度

使用填充因子会减少更新或者插入时的分页次数,但由于需要更多的页,则会对应的损失查找性能

如何设置填充因子的值

T-SQL:

CREATE CLUSTERED INDEX index_name ON table_name(col) WITH (FILLFACTOR = ?)

SQL Server 索引中的碎片和填充因子相关推荐

  1. T-SQL查询高级—SQL Server索引中的碎片和填充因子

        写在前面:本篇文章需要你对索引和SQL中数据的存储方式有一定了解.标题中高级两个字仅仅是因为本篇文章需要我的T-SQL进阶系列文章的一些内容作为基础. 简介 在SQL Server中,存储数据 ...

  2. 探索SSMS中SQL Server索引属性

    This article gives you an insight into SQL Server Index properties in SSMS. 本文使您可以深入了解SSMS中SQL Serve ...

  3. 【译】索引进阶(一):SQL SERVER索引介绍

    [译注:此文为翻译,由于本人水平所限,疏漏在所难免,欢迎探讨指正] 原文链接:http://www.sqlservercentral.com/articles/Stairway+Series/7228 ...

  4. 基准风险因子暴露度_具有性能基准SQL Server索引填充因子

    基准风险因子暴露度 In this article, we will study in detail about the how SQL Server Index Fill factor works. ...

  5. sql server 索引阐述系列五 索引参数与碎片

    原文:sql server 索引阐述系列五 索引参数与碎片 -- 创建聚集索引 create table [dbo].[pub_stocktest] add constraint [pk_pub_st ...

  6. SQL SERVER索引原理及填充因子

    在SQL Server中,索引是按B树(平衡树)结构进行组织的,索引B树中的每一页称为一个索引节点,B树的顶端节点称为根节点,索引中的底层节点称为叶节点,根节点与叶节点之间的任何索引级别统称为中间级, ...

  7. 翻译:SQL Server中的索引内部结构:到SQL Server索引级别10的阶梯。

    SQL Server中的索引内部结构:到SQL Server索引级别10的阶梯. 大卫•杜兰特2012/01/20 该系列 本文是楼梯系列的一部分:SQL Server索引的阶梯. 索引是数据库设计的 ...

  8. sql错误索引中丢失_收集,汇总和分析丢失SQL Server索引统计信息

    sql错误索引中丢失 描述 (Description) Indexing is key to efficient query execution. Determining what indexes a ...

  9. SQL Server 2008中SQL应用系列及BI学习笔记系列--目录索引 @邀月

    邀月 的数据库学习 http://www.cnblogs.com/downmoon/archive/2011/03/10/1980172.html SQL Server 2008中SQL应用系列及BI ...

  10. SQL Server索引总结二

    从CREATE开始 通过显式的CREATE INDEX命令 在创建约束时作为隐含的对象 随约束创建的隐含索引 当向表中添加如下两种约束之一时,就会创建隐含索引. 主键约束(聚集索引) 唯一约束(唯一索 ...

最新文章

  1. 一张900w的数据表,怎么把原先要花费17s执行的SQL优化到300ms?
  2. Web APP开发技巧总结(转)
  3. View.Post () 的身世大揭秘
  4. 第一次小班课(英语)
  5. Docker服务器的图形显示方案
  6. python ftplib_python:使用ftplib编写FTP客户端
  7. 机器学习(Machine Learning)与深度学习(Deep Learning)资料汇总
  8. PDF文件如何自动生成目录书签
  9. rsync用法详细解释
  10. React组件抽象(一): mixin
  11. 【编程题】【Scratch三级】2021.06 躲球游戏
  12. Win10无法开机提示自动修复无法修复你的电脑的有效解决方法
  13. 物业设备与设施管理【2】
  14. 分享几个关于UG装配的小问题,干货满满!!!
  15. frame切换、多窗口切换
  16. Android 收发彩信(MMS)
  17. Web安全之SQL注入漏洞学习(一)
  18. LADRC线性自抗扰,三阶ESO状态扩张观测器,boost升压电路,双闭环控制,双LADRC控制,电压外环采用LADRC线性自抗扰控制
  19. 一款“新颖” 潮范儿 的旅行APP软件
  20. 都问我在阿里上班是什么体验?今天就闲聊一下在阿里上班的体验!

热门文章

  1. animation unity 速度_Unity中用Timeline实现动画特写(上)
  2. 江西计算机竞赛有哪些,江西自主招生认可的竞赛有哪些
  3. java实现自行车行程
  4. D语言(Dlang)在单片机(cortex-m)上应用方法
  5. 求职简历中一些常见的问题
  6. 最近心血来潮,准备更新博客
  7. IPv6路由信息的序号
  8. wireshark排查网络延迟问题
  9. KTV信息管理系统+点歌系统(WPF)
  10. 无线通信与生活-(1)