知识点 词汇表 联系我们
按类别浏览
内容搜索    
当前位置:WEB开发技术知识库(www.cn-web.com) .: 数据库开发 .: MSSqlServer .: sqlserver索引基础知识专题之使用索引的代价

sqlserver索引基础知识专题之使用索引的代价


本文原创作者:蝈蝈俊



使用索引的意义

  • 索引在数据库中的作用类似于目录在书籍中的作用,用来提高查找信息的速度。
  • 使用索引查找数据,无需对整表进行扫描,可以快速找到所需数据。

使用索引的代价

  • 索引需要占用数据表以外的物理存储空间。
  • 创建索引和维护索引要花费一定的时间。
  • 当对表进行更新操作时,索引需要被重建,这样降低了数据的维护速度。

创建索引的列

  • 主键
  • 外键或在表联接操作中经常用到的列
  • 在经常查询的字段上最好建立索引

不创建索引的列

  • 很少在查询中被引用
  • 包含较少的惟一值
  • 定义为 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 值,使每个键唯一。此列和列值供内部使用,用户不能查看或访问。
 

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

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

1、缓存的命中率问题。(需要从B+树的结构分析)
2、连续和不连续的磁盘 I/O 操作对性能的影响 。




对此文章打分评级

用户评论

增加评论
此文章还没有任何评论!
网站地图 - 知识词汇 - 全文检索 - 广告服务 - 帮助中心 - 联系我们
.:www.cn-web.com
网站技术开发联盟之WEB开发技术知识库
联系人:老韩(QQ:5679551)
晋ICP备07003487号