转自:http://www.cnblogs.com/tmyh/archive/2010/09/29/sqlindex_01.html
我们来简单地看看SQL SERVER索引是如何工作的,关于索引的一些概念就不说了。
聚簇索引:
(图A)
我们来看图A,聚簇索引的结构图。
数据页就是数据库里实际存储数据的地方,可以看到是按页1页1页存的。
假设那个列是”LastName”。
因为是聚集索引,所以它是按照顺序排下来的。可以看到,索引是一棵树,首先先看一下这棵树是怎么形成的。
先看Page100和Page110的最上面,由它们形成了Page141,Page141的第一条数据是Page100的第一条数
据,Page141的最后一条数据是Page110的第一条数据。同理由Page120和Page130形成Page145,Page141和
Page145形成根Page140.
好了,然后来看看它是如何查找数据的。
我们来找”Rudd”这个姓。
首先它会从根即Page140开始找,因为”Rudd”的值比”Martin”大(只要比较一下他们首字母就知道了,按26个字母顺序R排在M的后
面),所以会往”Martin”的后面找,即找到Page145,然后在比较一下”Rudd”和”Smith”,”Rudd”比”Smith”小,所以会
往左边找即Page120,然后在Page120逐行扫描下来直到找到”Rudd”。
如果不建索引的话,SQL SERVER会从第一页开始按顺序每页逐行扫描过去,直到找到”Rudd”。显然如果对于一个百万行的表来说,效率是极其低下的,如果建了索引,非常快就能找到。
非聚簇索引:
(图B)
看图B,非聚簇索引的结构图。
聚簇索引和非聚簇索引的区别就是:聚簇索引的数据物理存储顺序和索引顺序一致的,也就是它的数据就是按顺序排下来的。非聚簇索引的数据存储是无序的,不按索引顺序排列。
从图B可以看到数据页里是无序的。那么它的索引是如何建立的呢?
再看图B,它是把这个索引列的数据复制了一份然后按顺序排下来,再建立索引。每行数据都有一个指针。
我们再来找”Rudd”.首先从索引页的根开始找,查找原理跟聚集索引是一样的。在索引页的Page61找到”Rudd”,它的指针是470501,然后在数据页的Page5找到470501,这个位置就是”Rudd”在数据库中的实际位置,这样就找到了”Rudd”。
好了,索引的基本工作原理就是这样,可能实际上要复杂些。
分享到:
相关推荐
SQL Server缺省情况下建立的索引是非聚簇索引,由于非聚簇索引不重新组织表中的数据,而是对每一行存储索引列值并用一个指针指向数据所在的页面。换句话 说非聚簇索引具有在索引结构和数据本身之间的一个额外级。一...
SQL Server缺省情况下建立的索引是非聚簇索引,由于非聚簇索引不重新组织表中的数据,而是对每一行存储索引列值并用一个指针指向数据所在的页面。换句话 说非聚簇索引具有在索引结构和数据本身之间的一个额外级。
二、聚簇索引和非聚簇索引 三、索引属性 四、用SQL建立索引 五、用事务管理器建立索引 六、创建索引的方法和索引的特征 1.创建索引的方法 2.索引的特征 七、索引的类型 1.聚簇索引的体系结构 2.非聚簇索引的体系...
在《数据库原理》里面,对聚簇索引的解释是:聚簇索引的顺序就是数据的物理存储顺序,而对非聚簇索引的解释是:索引顺序与数据物理排列顺序无关。正式因为如此,所以一个表最多只能有一个聚簇索引。 不过这个定义太...
书名: SQLServer2008查询性能优化 作者: 弗里奇(Grant Fritchey) 出版社: 人民邮电出版社 出版日期: 2010年8月1日 ISBN: 9787115230294 编辑推荐 《SQL Server 2008查询性能优化》为你提供了处理查询性能所...
书名: SQLServer2008查询性能优化 作者: 弗里奇(Grant Fritchey) 出版社: 人民邮电出版社 出版日期: 2010年8月1日 ISBN: 9787115230294 编辑推荐 《SQL Server 2008查询性能优化》为你提供了处理查询性能所...
聚集索引:物理存储按照索引排序 非聚集索引:物理存储不按照索引排序
SQL Server 2005 核心技术 SQL Server 2005 服务简介 SSAS(Analysis Service)与 商业智能(BI) 数据挖掘算法简介(Data Mining) 联机数据分析技术(OLAP) ...聚簇索引、非聚簇索引、索引设计建议和优化
我们知道SQLSERVER的数据行的存储有两种数据结构:A: 堆 B :B树(binary 二叉树) 数据按照这种两种的其中一种来排序和存储,学过数据结构的朋友应该知道二叉树,为什麽用二叉树,因为方便用二分查找法来快速 ...
一、什么是索引 减少磁盘I/O和逻辑读次数的最佳方法之一就是使用【索引】 索引允许SQL Server在表中查找数据而不需要扫描整个表。...所以SQLServer能从一个非聚集索引的页面中读到比包含该列的表也
表的索引与附在一本书后面的索引非常相似。它可以极大地提高查询的速度。对一个较大的表来说,通过加索引,一个通常要... 聚簇索引和非聚簇索引 假设你已经通过本书的索引找到了一个句子所在的页码。一旦已经知道了页
索引 大量使用非聚簇索引,一般保存在数据库中。 通过层次型、保存中间结果的方式,通过不同的轴向快速定位信息剖面。 基于XPath的索引,索引一般保存在数据库中。 基于关键字的索引,保存在文件系统中。每个表仅...
您可以创建聚簇索引(这意味着您也可以创建非聚簇主键索引)。 如何使用? 将Toolbelt.EntityFrameworkCore.IndexAttribute包添加到您的项目中。 dotnet add package Toolbelt.EntityFrameworkCore.IndexAttribute ...
另一个 Adaptive Server .......... 164 系统限制 .......... 165 quiesce database 扩展 .......... 165 第 8 章分布式事务管理 .......... 167 受影响的事务类型 .......... 168 由外部事务管理器协调的分布式事务...