• 索引 聚集索引设计指南


    聚集索引基于数据行的键值在表内排序和存储这些数据行, 每个表只能有一个聚集索引, 因为数据行本身只能按一个顺序存储. 有关聚集索引体系结构的详细信息, 请参阅 聚集索引结构

    每个表几乎都对列定义聚集索引来实现下列功能:

    • 可用于经常使用的查询.

    • 提供高度唯一性. 创建 PRIMARY KEY 约束时, 将在列上自动创建唯一索引. 默认情况下, 此索引是聚集索引, 但是在创建约束时,可以指定创建非聚集索引.
    • 可用于范围查询.

    如果未使用 UNIQUE 属性创建聚集索引, 数据库引擎将向表自动添加一个 4 字节的 uniqueifier 列. 必要时, 数据库引擎将向行自动添加一个 uniqueifier 值以使每个键唯一, 此列和列值供内部使用, 用户不能查看或访问. 


    查询注意事项

    在创建聚集索引之前, 应先了解数据是如何被访问的. 考虑对具有以下特点的查询使用聚集索引:

    • 使用运算符(如 BETWEEN、>、>=、< 和 <=)返回一系列值.

      使用聚集索引找到包含第一个值的行后,便可以确保包含后续索引值的行物理相邻. 例如, 如果某个查询在一系列销售订单号间检索记录, SalesOrderNumber 列的聚集索引可快速定位包含起始销售订单号的行, 然后检索表中所有连续的行, 直到检索到最后的销售订单号.

    • 返回大型结果集.

    • 使用 JOIN 子句; 一般情况下, 使用该子句的是外键列.

    • 使用 ORDER BY 或 GROUP BY 子句, 在 ORDER BY 或 GROUP BY 子句中指定的列的索引, 可以使数据库引擎不必对数据进行排序,因为这些行已经排序, 这样可以提高查询性能.

    列注意事项

    一般情况下, 定义聚集索引键时使用的列越少越好, 考虑具有下列一个或多个属性的列:

    • 唯一或包含许多不重复的值

      例如, 雇员 ID 唯一地标识雇员. EmployeeID 列的聚集索引或 PRIMARY KEY 约束将改善基于雇员 ID 号搜索雇员信息的查询的性能. 另外, 可对LastNameFirstNameMiddleName 列创建聚集索引, 因为经常以这种方式分组和查询雇员记录, 而且这些列的组合还可提供高区分度.

    • 按顺序被访问

      例如, 产品 ID 唯一地标识 AdventureWorks2008R2 数据库的 Production.Product 表中的产品. 在其中指定顺序搜索的查询(如 WHERE ProductID BETWEEN 980 and 999)将从 ProductID 的聚集索引受益, 这是因为行将按该键列的排序顺序存储. 

    • 由于保证了列在表中是唯一的, 所以定义为 IDENTITY. 

    • 经常用于对表中检索到的数据进行排序. 

      按该列对表进行聚集(即物理排序)是一个好方法, 它可以在每次查询该列时节省排序操作的成本. 

    聚集索引不适用于具有下列属性的列:

    • 频繁更改的列

      这将导致整行移动, 因为数据库引擎必须按物理顺序保留行中的数据值. 这一点要特别注意, 因为在大容量事务处理系统中数据通常是可变的. 

    • 宽键   宽键是若干列或若干大型列的组合. 所有非聚集索引将聚集索引中的键值用作查找键, 为同一表定义的任何非聚集索引都将增大许多, 这是因为非聚集索引项包含聚集键, 同时也包含为此非聚集索引定义的键列. 

    设置索引选项

    创建聚集索引时, 可指定若干索引选项, 因为聚集索引通常都很大, 所以应特别注意下列选项:

    • SORT_IN_TEMPDB

    • DROP_EXISTING

    • FILLFACTOR

    • ONLINE

    有关详细信息,请参阅 设置索引选项.

  • 相关阅读:
    字符串的操作
    vue2.0状态
    vue2.0 Loding组件(收集转载)
    动态加载js文件,并在加载成功后执行回调函数
    Vue2.0 keep-alive 后组件不使用缓存
    前端必要知识汇总
    Vue2.0的群组路由
    video视频限时观看
    iOS军火库-好用的ActionSheetView
    我的网络层是这么设计的
  • 原文地址:https://www.cnblogs.com/biwork/p/2917234.html
Copyright © 2020-2023  润新知