• MS SqlServer学习笔记(索引)


    1.索引分类

    MS SqlServer提供了两种索引:聚集索引和非聚集索引;

    • 聚集索引是将数据按照索引的顺序存放
    • 非聚集索引是将索引和数据分离存放,通过指针将二者联系到一起。

    因为两种索引对比:

    • 使用聚集索引查询效率更高,但对表的更新效率影响较大,因此适用于更新读写比较大的表,例如商品详情(创建后很少改动,查看的频率却相对较高)
    • 使用非聚集索引则查询效率较低,对表的更新效率影响较小,适用于对查询需求不大打表,例如日志表

    聚集索引注意点:

    1. 聚集索引在一个表中只能有一个,但是不限于一列,可以是包含多个列的组合索引
    2. 虽然可以多列,但是列越少越好
    3. 创建聚集索引的列的重复性越低越好,因为如果聚集索引不是唯一值,SQL SERVER会生成额外的标识信息以区分数据
    4. 适合使用在返回一个返回值的场合:BETWEEN...AND , >= , <= , > , <
    5. 适合返回大型结果集的查询
    6. 适合被连续访问的列
    7. 适合经常被连接及Group By的列
    8. 最好使用窄列或窄列组合作为聚集索引列
    9. 不适合频繁更改的列(由于表是按照索引排序的,索引的更新将导致数据整行移动

    非聚集索引注意点:

    1. 非聚集索引可以看成是高效率查询数据的一种途径。例如对人群进行筛选可以从年龄,收入,性别等多种角度切入,每个角度都可以建立一个非聚集索引

    创建聚集索引和非聚集索引的列是有要求的,以下类型无法创建索引:

    • binary、varbinary
    • ntext、text、image
    • varchar(max)、nvarchar(max)
    • uniqueidentifier
    • rowversion、timestamp
    • sql_variant
    • 精度大于 18 位的 decimal 和 numeric
    • 标量大于 2 的 datetimeoffset
    • CLR 类型(hierarchyid和空间类型)
    • xml

     如果使用以上类型的列,会出现错误【表'TABLE_NAME'中的列 'COLUMN_NAME' 的类型不能用作索引中的键列。】

    使用索引的好处:能够根据查询要求,迅速缩小查询范围,避免全表扫描。

    相关参考

  • 相关阅读:
    CSS display:none和visibility:hidden区别
    Eclipse 开发版本选择
    JavaScript 三种弹出框
    jstree的数据后台生成
    C# Enum,Int,String的互相转换 枚举转换
    JS 异常: Uncaught RangeError: Maximum call stack size exceeded
    JS中encodeURI,escape,encodeURIComponent区别
    安卓Android手机系统内文件夹目录解释
    jquery操作select(取值,设置选中)
    单例/单体模式(Singleton)
  • 原文地址:https://www.cnblogs.com/TiestoRay/p/5388329.html
Copyright © 2020-2023  润新知