`

SQL SERVER索引优化系列之一:工作原理&聚簇索引|非聚簇索引

阅读更多

转自:http://www.cnblogs.com/tmyh/archive/2010/09/29/sqlindex_01.html

 

我们来简单地看看SQL SERVER索引是如何工作的,关于索引的一些概念就不说了。

 

 

聚簇索引:

A

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(图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可以看到数据页里是无序的。那么它的索引是如何建立的呢?

再看图B,它是把这个索引列的数据复制了一份然后按顺序排下来,再建立索引。每行数据都有一个指针。

我们再来找”Rudd”.首先从索引页的根开始找,查找原理跟聚集索引是一样的。在索引页的Page61找到”Rudd”,它的指针是470501,然后在数据页的Page5找到470501,这个位置就是”Rudd”在数据库中的实际位置,这样就找到了”Rudd”。

好了,索引的基本工作原理就是这样,可能实际上要复杂些。

 

分享到:
评论

相关推荐

    SqlServer索引工作原理

    SqlServer索引工作原理可以分为两大类:聚簇索引和非聚簇索引。 聚簇索引是一种树形结构的索引,它的数据物理存储顺序和索引顺序一致的。聚簇索引的数据页是按照顺序排列的,例如按照LastName的顺序排列的。聚簇...

    SQLServer 索引查询优化指南

    通过理解这些概念和技巧,开发者能够更好地理解SQLServer索引的工作原理,从而更有效地优化查询,提升数据库系统的整体性能。这个PPT资料将详细讲解这些内容,对于SQLServer的开发和管理员来说,是一份宝贵的资源。

    sql server 索引设计与优化

    ### SQL Server 索引设计与优化 #### 索引的重要性 ...通过上述内容的学习,读者不仅能够深刻理解SQL Server索引的设计原理和技术细节,还能够掌握一系列实用的索引优化技巧,从而显著提高数据库系统的整体性能。

    SQL SERVER建立索引.pdf

    一个表可以有多个非聚簇索引。与聚簇索引相比,非聚簇索引更适合于查找特定值的查询,但可能不太适合范围查询,因为需要通过索引项指向的数据行进行查找。 #### 三、索引属性 - **复合索引**:可以同时基于多个列...

    利用索引提高SQLServer数据处理效率

    在SQL Server数据库中,索引是提升数据处理效率的...合理使用聚簇索引、非聚簇索引和覆盖索引,结合对查询模式的深入理解和系统负载的实时监控,可以显著提高SQL Server的数据处理效率,从而提升整个应用系统的性能。

    关于SQL Server中索引使用及维护简介

    例如,对于住房公积金管理系统中的个人明细表p_detail,可以根据查询习惯和业务需求,针对性地创建聚簇或非聚簇索引,以优化查询性能。 总之,SQL Server的索引设计是一个平衡的过程,既要考虑查询速度的提升,也要...

    SQLServer索引调优实践

    而另一种方式则是通过目录找到汉字“爬”所在的页码,再根据页码找到这个字,这便是非聚簇索引的工作原理。 #### 使用聚簇索引与非聚簇索引的选择 下面这张表格总结了在不同情况下应使用聚簇索引还是非聚簇索引: ...

    SQL Server索引设计和调优技术大全

    #### 四、SQL Server非聚簇索引设计 - **选择合适的列**:选择经常出现在WHERE子句中的列,以及JOIN操作中的列。 - **复合索引**:当单个列不足以支持高效的查询时,可以考虑创建包含多个列的复合索引。 - **统计...

    Sybase SQL Server索引的使用和优化.pdf

    非聚簇索引不重新组织表中的数据,而是对每一行存储索引列值并用一个指针指向数据所在的页面。非聚簇索引具有在索引结构和数据本身之间的一个额外级。 在建立非聚簇索引时,要权衡索引对查询速度的加快与降低修改...

    SQL Server数据库中索引使用和优化

    2. **非聚簇索引**:非聚簇索引不改变数据的物理顺序,它独立于数据存储,包含一个指向数据页的指针。非聚簇索引适用于更新频繁的表,因为它们的维护成本相对较低,但查询时可能需要额外的I/O操作。非聚簇索引适用于...

    SQL Server索引技术.pdf

    本文针对SQL Server的索引技术进行了详细的探讨,并提供了聚簇索引和非聚簇索引的详细信息。 聚簇索引是数据库索引的一种,它决定了表中数据的物理存储顺序。在聚簇索引中,数据行按照索引键的顺序存储在数据页上。...

    建立合理的索引提高SQL Server的性能

    **非聚簇索引**是独立于数据物理排列的索引,每个非聚簇索引都有一个额外的级别指向实际数据页。非聚簇索引对于更新操作来说可能带来额外开销,因为它需要更新指向数据的指针。然而,它们提供了不同的数据访问路径,...

    SQLServer性能优化解析说明

    SQL Server性能优化是数据库管理中...合理利用聚簇索引、非聚簇索引和覆盖索引,根据业务需求进行索引设计,是提升SQL Server性能的关键步骤。在实践中,还应注意定期评估和调整索引策略,以应对数据和查询模式的变化。

    SQLServer索引+性能优化.rar

    在这个名为"SQLServer索引+性能优化.rar"的压缩包中,包含了一系列关于SQL Server性能优化和索引原理的PPT材料,适合初学者进行深入学习。 首先,让我们来了解索引的基本概念。在数据库中,索引就像是书籍的目录,...

    sql server 性能优化大全

    正确选择索引类型(如聚簇索引、非聚簇索引),以及索引的维护策略,对数据库性能有显著影响。 3. 避免长事务:长事务会占用系统资源,阻塞其他操作。优化事务的长短,可以提高并发处理能力。 4. 存储过程:存储过程...

    SQL Server索引的性能

    在本文中,我们将深入探讨SQL Server中的聚簇索引、非聚簇索引以及覆盖索引的使用策略,并提供一些实用建议以帮助您优化索引性能。 聚簇索引在SQL Server中具有特殊的地位,因为它决定了数据在磁盘上的物理排列顺序...

    SQL_Server索引设计和调优技巧大全

    - **特点**:一个表可以拥有多个非聚簇索引,提高了查询灵活性。 - **应用**:适用于频繁使用的查询条件,可以快速定位数据。 #### 六、非聚簇索引设计 ##### 6.1 非聚簇索引的应用 - **优化查询**:通过创建针对...

    SQL SERVER性能优化综述

    非聚簇索引、聚簇索引、唯一索引、全文索引等都有其特定应用场景。理解何时使用何种类型的索引,以及如何避免索引失效,是性能优化的重要一环。 2. **查询优化器**:SQL Server的查询优化器负责生成执行计划。理解...

    sqlserver数据库优化总结的资料

    非聚簇索引和聚簇索引各有优缺点,应根据数据分布和查询模式来选择。另外,索引维护也很重要,包括定期重建和重新组织索引,以保持其效率。 3. **存储过程和函数优化**:存储过程可以封装复杂的业务逻辑,减少网络...

    浅析优化处理SQL Server数据库索引.pdf

    本文档旨在分析和实践SQL Server索引的性能问题,深入探讨聚簇索引、非聚簇索引、覆盖索引的使用及其选择技术。 首先,聚簇索引(clustered indexes)在数据库中的作用是按照指定的一个或多个列的值对表中数据重新...

Global site tag (gtag.js) - Google Analytics