原文:SQL Server 索引和表体系结构(聚集索引)

聚集索引

概述

关于索引和表体系结构的概念一直都是讨论比较多的话题,其中表的各种存储形式是讨论的重点,在各个网站上面也有很多关于这方面写的不错的文章,我写这篇文章的目的也是为了将所有的知识点尽可能的组织起来结合自己对这方面的了解些一篇关于的详细文章出来,同时也会列出一些我自己有疑惑的地方拿出来探讨,介于表达能力有限,有些地方可能无法表达的很明了,还望大家包涵;对于文章中有不对的地方也希望大家能提出,写文章的目的就是为了共享资源;对于这个系列会写5篇文章,在接下来的几天里逐一发布,分别是“聚集索引体系结构”,“非聚集索引体系结构”,“堆体系结构”,“具有包含列的索引”,“表组织和索引组织”。

正文

  • 定义 

在 SQL Server 中,索引是按 B 树结构进行组织的。索引 B 树中的每一页称为一个索引节点。B 树的顶端节点称为根节点。索引中的底层节点称为叶节点。根节点与叶节点之间的任何索引级别统称为中间级。在聚集索引中,叶节点包含基础表的数据页。根节点和中间级节点包含存有索引行的索引页。每个索引行包含一个键值和一个指针,该指针指向 B 树上的某一中间级页或叶级索引中的某个数据行。每级索引中的页均被链接在双向链接列表中。

  • 聚集索引单个分区中的结构
  • 存储

在SQL Server中,存储数据的最小单位是页,数据页的大小是8K,,8个页组成一个区64K,每一页所能容纳的数据为8060字节,聚集索引的叶节点存储的是实际数据行,而且每页数据行是顺序存储,数据行基于聚集索引键按顺序存储,所以一个数据表只能建一个聚集索引。

非叶子节点(跟节点和中间级)存储的是索引记录,一条索引记录包含:键值(键值也就是聚集索引列的字段值)+指针(指向索引页或者数据页)

由于数据存储在数据页中,索引建存储在索引页中,所以检索单个索引列的数据要快于检索数据记录,因为不需要读取数据页,只需要在索引页中检索数据。

  • 聚集索引列选择

窄列(字段长度短的列):由于索引页存储的是索引记录,索引记录存储的是索引建值和指针,为了让索引列存储更多的索引记录,所以我们选择窄列。

不频繁更新的列:由于索引记录的指针指向数据页,如果数据频繁更新会造成索引页更新,同时由于非聚集索引的数据页的行指针指向聚集索引的数据行,更新聚集索引同时也会造非聚集索引页的更改造成IO消耗。

不重复的列:由于聚集索引的数据页中的数据记录是按聚集建的顺序存储,当向聚集列中插入重复的记录,当数据页超过8060K就会造成分页,分页会将原页中的一半记录插入到新页中,而产生索引碎片。

可以使用自增列作为聚集索引列(这里只是给个建议,需要根据实际的业务来)

总结

   可能是我的表达能力比较差的原因,很多时候对于自己想表达的内容无法用文字的形式来描述,这也是写文章的难处吧!

备注:

作者:pursuer.chen

博客:http://www.cnblogs.com/chenmh

本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接,否则保留追究责任的权利。

《欢迎交流讨论》

SQL Server 索引和表体系结构(聚集索引)相关推荐

  1. 面向初学者的 SQL Server 查询执行计划(1)——聚集索引运算符(Clustered Index)

    在本文中,我们将讨论与聚集索引相关的各种执行计划运算符,以及它们的作用.它们何时出现以及它们何时出现. 执行计划中的每一个运算符都会提供一些有关 SQL Server 运行方式的指标. 我们需要理解这 ...

  2. sql查询初学者指南_面向初学者SQL Server查询执行计划–非聚集索引运算符

    sql查询初学者指南 Now that we understand what Clustered Index Scan and Clustered Index Seek are, how they o ...

  3. SQL Server临界点游戏——为什么非聚集索引被忽略!

    当我们进行SQL Server问题处理的时候,有时候会发现一个很有意思的现象:SQL Server完全忽略现有定义好的非聚集索引,直接使用表扫描来获取数据.我们来看看下面的表和索引定义: 1 CREA ...

  4. SQL Server中对比表数量,索引数量及procedure数量

    1.      查询对比两个数据库中的存储过程差异: Select name from sysobjects a where not exists(select name from MI02.dbo. ...

  5. SQL Server索引概要(2)-非聚集索引(Non-Clustered Index)

    介绍 在上一篇SQL Server 聚集索引概述 中,我们探讨了 SQL Server 中索引和聚集索引的要求. 在我们继续之前,让我们快速总结一下 SQL Server 聚集索引: 它根据聚集索引键 ...

  6. SQL Server 索引和表体系结构(三)

    SQL Server 索引和表体系结构(三) 原文:SQL Server 索引和表体系结构(三) 包含列索引 概述 包含列索引也是非聚集索引,索引结构跟聚集索引结构是一样,有一点不同的地方就是包含列索 ...

  7. SQL Server Insert 操作效率(堆表 VS 聚集索引表)

    "SQL Server的Insert操作在堆表或者聚集索引表的时候,哪个效率更高?为什么高?" 之前有同事问过我这个问题,为了确保日志库的记录效率,于是我做了简单测试了,首先要先强 ...

  8. SQL Server 索引和表体系结构(包含列索引)

    包含列索引 概述 包含列索引也是非聚集索引,索引结构跟聚集索引结构是一样,有一点不同的地方就是包含列索引的非键列只存储在叶子节点:包含列索引的列分为键列和非键列,所谓的非键列就是INCLUDE中包含的 ...

  9. [转]SQL Server 索引基础知识(2)----聚集索引,非聚集索引

    SQL Server 索引基础知识(2)----聚集索引,非聚集索引 [来自]http://blog.joycode.com/ghj/archive/2008/01/02/113291.aspx 由于 ...

最新文章

  1. 解密个性化资讯推荐技术
  2. 3DSlicer30:VS-Qt5VSaddin-qt4.8.7dev
  3. python从标准输入读取数据_在PYTHON中如何从标准输入读取内容stdin
  4. 腾讯爬虫python_Python爬虫,爬取腾讯漫画实战
  5. 013. MVC5过滤器
  6. PHP输入流 php://input 相关【转】
  7. “耳边的AI助理” 出门问问发布TicPods 2系列头控真无线耳机
  8. 分布式SQL学习总结(2)——TiDB 的现在和未来
  9. Flutter学习 — 给新页面传值
  10. 【转】数据挖掘从入门到进阶
  11. 单片机上面的继电器工作原理及其作用
  12. qqxml图片代码_QQxml卡片代码合集超大图、清明上河图、官方认证推荐等
  13. SqlServer数据库 设置查询结果字体
  14. 国内外主流的三维GIS软件
  15. 根据线索整理的一套在2021年继续使用Flash Player的方法(20.12.29更新)
  16. ccxprocess启动项可以禁用么_启动项禁用
  17. 五大自动化测试 Python 框架
  18. 短视频行业深度(一)快手科技:私域筑垒,公域进军.PDF
  19. python之路day3_python之路:day3
  20. android:声音合成之TTS

热门文章

  1. 使用元学习和推理改善您的模型!
  2. CIO和CTO到底有什么不同?
  3. latex中常使用符号大全
  4. 我们正处于新科学革命的起点 | 学界热议AI for Science
  5. 汪卫华院士:无序中找有序 复杂中寻规律
  6. 增强现实系统的三大关键技术是什么?
  7. 十问亿级神经元类脑计算机:AI领域有望突破,哪些还需火候
  8. [附下载]英特尔中国研究院携手生态伙伴发布《机器人4.0白皮书》
  9. 微软向马斯克的人工智能公司OpenAI投资10亿美元
  10. 人造神经元计算速度超过人脑