简述:聚集索引和非聚集索引的区别

聚集索引:一种索引,该索引中键值的逻辑顺序决定了表中相应行的物理顺序。

  CREATE CLUSTERED INDEX CLUSTER_ID ON TABLE_NAME(ID)

非聚集索引:一种索引,该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同。

  CREATE NONCLUSTERED INDEX NONCLUSTER_ID ON TABLE_NAME(ID)

拿新华字典查字打比方。聚集索引,相当于按拼音检索,而非聚集索引相当于按部首检索。按拼音检索说明这个字你已认识,直接到指定的位置即可查到,不需要全文检索。按部首检索说明你对这个字不认识,需要根据他的偏旁部首进行全文检索才可查到。

SqlServer默认是在主键上建立聚集索引的。有的人把表步长为1自动增大的ID列作为主键被默认了聚集索引,但是这么做意义是不大的。聚集索引最大的好处是可根据查询要求,迅速缩小查询范围,避免了全表扫描,很难在实践中用ID作为查询条件来进行查询,这就使得ID号为主键做聚集索引,成为了一种资源的浪费!要知道一张表是只能建立一个聚集索引规则的,这使得它变得非常珍贵。同样的字段上加聚集索引和非聚集索引,查询的速度可是天壤之别的,并非在任何字段上简单的建立索引就能提高查询速度。建立适当的聚集索引对于我们提高查询速度是极其重要的。

 

【索引相关知识】

    1.聚集索引字段的字节数越小,索引的速度就会越快。
    2.聚集索引很宝贵一个表只能建一个,聚集索引很重要会影响到与之关联的非聚集索引。
    3.在创建索引时,可以为这个索引指定一个填充因子,以便在索引的每个叶级页面上保留一定百分比的空间,将来数据可以进行扩充和减少页分裂。填充因子是从0到100的百分比数值,设为100时表示将数据页填满,只有当不会对数据进行更改时(例如只读表中)才用此设置。值越小则数据页上的空闲空间越大,这样可以减少在索引增长过程中进行页分裂的需要,但这一操作需要占用更多的硬盘空间。当填充因子的值为50时,数据库的读取性能会降低两倍。
    4.填充因子(FillFactor):指定SqlServer存储索引数据时每个索引的充满程度。用户指定的fillfactor取值范围从1到100.住过没有指定fillfactor,则默认为0。
    优点:减少了页面分裂的次数。
    缺点:增大了使用的存储空间。
   5.重建索引:可减少请求数据所需的页数来提高性能。
    (1)在执行INSERT、UPDATE、DELETE语句之后,会使得索引数据散乱在数据库存储空间内。
    (2)重建索引以优化索引结构
    (3)DBCCDBREINDEX(表名,索引名,填充因子)
    (4)注:可减少请求数据所需的页数来提高性能

        dbcc dbreindex(表名、索引名、填充因子)
        bdcc dbreindex(tb)
        dbcc showconfig(tb):查看索引分页情况
    6.在查询中强制使用索引,select * from tb with(index=tb_index) where datetime='2017-03-10'

 

posted @ 2016-03-08 15:55  ice_baili  阅读(791)  评论(0编辑  收藏  举报