码迷,mamicode.com
首页 > 其他好文 > 详细

聚集索引、非聚集索引、主键

时间:2017-02-15 12:37:59      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:bsp   数据库   二叉树   原则   数据   注意   决定   性能   情况   

关于这几个概念的理解

首先要知道索引是一种数据结构,这个数据结构是由数据库本身来维护的,当删除、插入、更新数据的时候,索引自身的数据结构也在不断维护中。

索引是基于二叉树的结构来维护的,主要是为了快速检索数据

二叉树结构中有叶节点和非叶节点,叶节点就是没有分支的最后节点,顾名思义就像叶子一样

那么聚集索引,聚集索引的叶节点存储的就是数据本身,这就意味着,聚集索引决定了数据的物理存储顺序。因此聚集索引在单叶节点中是一个连续存储的数据。所以对于between < > 等范围查询,聚集索引效率会很高,因为数据本身就是连续存储的,但是对于频繁更新的列不适合聚集索引,为什么?因为会频繁更改变数据的物理地址,会影响性能。这里要说明的是,对于guid类型的主键列,聚集索引和非聚集索引那种更合适?个人认为非聚集索引更合适了,因为guid类型不会用到范围查询,只有=查询,所以没有必要使用聚集索引,但是对于自增列类型的,可以使用聚集索引,还有就是时间列,会经常用到> < =查询也是适合聚集索引。聚集索引非常珍贵,因为一张表只有一个聚集索引,所以不要将聚集索引浪费在一个guid列中,在sqlserver数据库中,主键默认的索引是聚集索引,所以需要注意的是要将其设为非聚集索引。

那么非聚集索引,非聚集索引的叶节点存储的不是数据,而是数据的物理地址,就像指针一样,指向的是数据的地址,所以非聚集索引是一个非连续的数据。对于频繁更新的索引列,并没有更新实际的物理存储地址,对于大数目的不同值适合非聚集索引,但是对于极少的不同值,建立索引就没有多少意义了,举个简单的例子,假如有100万条数据,类型只有AB两种,那么不会起到快速检索的效果。因此建立索引的原则不是越多越好,要根据实际情况建立。

主键是一种特殊的具有唯一约束的索引,可以是聚集索引或者非聚集索引,主键不可以为空,唯一约束的索引可以为空

 

聚集索引、非聚集索引、主键

标签:bsp   数据库   二叉树   原则   数据   注意   决定   性能   情况   

原文地址:http://www.cnblogs.com/njcxwz/p/6400575.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!