快捷搜索:

SQL Server 索引基础知识(6)----索引的代价,使用场

前几天给同事培训了凑集索引,非凑集索引的常识后,在一个同事新作的项目中,竟然呈现了滥用凑集索引的问题。看来没有培训最最根基的索引的意义,价值,应用处景,是一个异常大年夜的掉误。这篇博客便是从这个角度来列举索引的根基常识。

应用索引的意义

索引在数据库中的感化类似于目录在册本中的感化,用来前进查找信息的速率。

应用索引查找数据,无需对整表进行扫描,可以快速找到所需数据。

应用索引的价值

索引必要占用数据表以外的物理存储空间。

创建索引和掩护索引要花费必然的光阴。

当对表进行更新操作时,索引必要被重修,这样低落了数据的掩护速率。

创建索引的列

主键

外键或在表联接操作中常常用到的列

在常常查询的字段上最好建立索引

不创建索引的列

很少在查询中被引用

包孕较少的惟一值

定义为 text、ntext 或者 image 数据类型的列

Heaps是staging data的很好选择,当它没有任何Index时

Excellent for high performance data loading (parallel bulk load and parallel index creation after load)

Excellent as a partition to a partitioned view or a partitioned table

凑集索引前进机能的措施,在前面几篇博客平分手提到过,下面只是一个简单的大年夜纲,细节请参看前面几篇博客。

何时创建凑集索引?

Clustered Index会前进大年夜多半table的机能,尤其是当它满意以下前提时:

独特, 狭窄, 静止: 最紧张的前提

持续增长的,最好是只向上增添。例如:

Identity

Date, identity

GUID (only when using newsequentialid() function)

凑集索引独一性(独特型的问题)

因为凑集索引的B+树布局的叶子节点必须指向详细数据。假如你要建立凑集索引的列不独一,并且你指定的创建的凑集索引长短独一的凑集索引,则会有以下环境:

假如未应用 UNIQUE 属性创建凑集索引,数据库引擎 将向表自动添加一个四字节 uniqueifier 列。需要时,数据库引擎 将向行自动添加一个 uniqueifier 值,使每个键独一。此列和列值供内部应用,用户不能查看或造访。

参看我的这篇博客:

SQL Server 索引根基常识(4)----主键与凑集索引

http://tech.ddvip.com/2008-02/120340635941893.html

凑集索引持续向上增长的需求

详细来说下面两个问题要求建立凑集索引的列最好是持续向上增长的

1、缓存的射中率问题。(必要从B+树的布局阐发)

2、继续和不继续的磁盘 I/O 操作对机能的影响 。

细节参看我的这篇博客:

SQL Server 索引根基常识(5)----理解newid()和newsequentialid()

http://tech.ddvip.com/2008-02/120340674641896.html

至于,假如你的数据已经存在重复了,而且是不应该呈现的,则可以参看下面这篇KB :

若何删除 SQL Server 表中的重复行

http://support.microsoft.com/kb/139444/zh-cn

非凑集索引前进机能的措施

非凑集索引因为B+树的节点不是详细数据页,无意偶尔候因为这个缘故原由,会导致非凑集索引以致不如表遍历来的快,参看我鄙人面这篇博客中给的例子

http://blog.joycode.com/ghj/archive/2008/01/02/113291.aspx

您可能还会对下面的文章感兴趣: