zoukankan      html  css  js  c++  java
  • Sqlserver索引

    聚集索引和非聚集索引


    聚集索引: 表中各行的物理顺序和索引键值的逻辑顺序相同。一个表中只能有一个聚集索引。聚集索引通常可以加快update和delete的操作速度。只有表包含聚集索引时,表中的数据才按排序顺序存储,该表称为聚集表;如果表没有聚集索引,则其数据行存储在堆的无序结构中。

    非聚集索引:具有独立于数据行的结构。非聚集索引包含非聚集索引键值,并且每个键值项都有指向包含该键值的数据行的指针。

    ...

    通常情况下,只有当经常查询索引列中的数据时,才需要在表上创建索引。索引会占用磁盘空间,并且降低添加、删除和更新行的速度。

    查看索引信息 


     1.在左侧对象资源管理器中查看

     2.exec sp_helpindex tableName

    创建索引 


    create [unique] [clustered | nonclustered] index indexName on{table | view }(columnName [asc | desc] [,...n])

      

    修改索引


    alter index {indexName | all} on <table | view>
    {rebuild | disable | reorganize} [;]

    https://docs.microsoft.com/zh-cn/sql/relational-databases/indexes/modify-an-index?view=sql-server-2017

    删除索引 


    drop index tableName.indexName

      

    索引的设计 


     不宜建索引的情形:对于经常插入、修改、删除数据的表,不宜创建过多索引。因为当表中的数据发生变化时,索引都要做相应的调整。

    . 适合建索引的情形:

              1.为where子句中出现的列创建索引

              2.如果where子句中涉及多个列,则可以创建由多列组成的组合索引

              3.为group by 子句中出现的列创建索引

    聚集索引的设计原则:

              1.该列数值唯一,或很少重复,如自增列

              2.经常使用between... and... 按顺序查询的列

              3.经常用于对数据进行排序的列

              4.聚集索引不适合对多个列创建组合索引

    无法使用索引的查询语句 


     1.对索引列应用了函数,例如: 

    select * from order where abs(payment)>200

     2.对索引列使用了like 并且通配符%在前,例如:

    select * from order where username like '%l'

    3.对索引列进行了类型转换

    select * from order where cast(payment as decimal(18,2))>200

    4.组合索引中的第一列未出现在where子句中

    例如,组合索引中的列顺序为A、B、C,但是查询的where子句中引用到的列没有A,即使有B和C也不会使用到索引

    5.在where子句中使用in关键字并且嵌套select子句,例如:

    select * from order where orderid in(select orderid from orderinfo)

    索引 碎片


     每当插入、修改、和删除数据时,数据库引擎都会自动对索引进行维护,久而久之,会导致索引分散在数据库中,形成碎片。当碎片达到一定程度时,会降低查询效率。可以通过重新组织和重新生成索引来修复索引碎片

    1.检测碎片

    sys.dm_db_index_physical_stats(
    
    {databaseid},
    
    {object_id},
    
    {index_id},
    
    {partition_number},
    
    {mode | default}
    
    )

    2.重新组织索引

    通过对页进行物理重新排序,使其与叶节点的逻辑顺序相匹配,从而对索引进行叶级别的碎片整理

    alter index indexName on table reorganize

    3.重新生成索引

    删除指定索引并创建一个新索引。此过程将删除索引的碎片并在连接页中对索引进行重新排序

    alter index indexName on table rebuild
  • 相关阅读:
    Javascript DOM 编程艺术读书笔记16/03/25
    2014 Multi-University Contest 1.1 hdu4861 打表找规律
    汇编小记16/3/23
    汇编小记16/3/22
    hdoj 4940 强连通图
    Head FIRST HTML & CSS 16/03/17
    html&css一些有用的网站整理
    dosbox+debug 模拟dos
    汇编小记16/3/15
    解决windwos另存为,保存文件时无法选择“桌面”文件夹
  • 原文地址:https://www.cnblogs.com/Linky008/p/10807992.html
Copyright © 2011-2022 走看看