• Design5:索引设计


    在SQL Server中,一个表只有两种存储结构:Heap和B-Tree,Heap是指没有创建聚集索引的表,B-Tree 结构是指已经创建聚集索引的表。

    一,Heap和B-Tree的选择

    索引是为了提高查询性能而设计的存储结构,索引是独立于“数据”之外的数据结构,设计目标是为了查找数据,例如,对于聚集索引,叶子节点存储的是数据,非叶子节点上存储的是索引结构。

    在更新数据时,SQL Server需要维护索引结构的更新,这可能会降低数据更新的性能,注意,是可能降低数据更新的性能,而不是一定会降低数据更新的性能。

    要根据对表操作的类型来选择表的存储结构:

    • 如果一个表纯粹只是为了存储数据,而不进行查询,那么推荐不创建任何索引,使得该表不用维护任何索引结构,表的存储结构就是Heap。
    • 如果一个表不仅存储数据,而且还会查询数据,那么推荐在表上创建聚集索引,把表结构转换为B-Tree结构。举个例子,通常,带where条件的Update操作,首先需要查找到数据,然后再更新数据。 

    注意,一个表只能创建一个聚集索引,从SQL Server 2016开始,可以表上创建的聚集索引,要么是rowstore的聚集索引,要么是columnstore的聚集索引。

    二,索引的选择

    对于Disk-base的表上索引,从存储格式上来看,可以分为rowstore和columnstore:

    • 由于rowstore索引使用平衡树结构来存储数据,特别使用对单行数据或少量数据行的查找;由于rowstore索引是有序的,因此适合用于范围查找。
    • columnstore索引有更高的压缩效率,特别适合用于数据仓库中的分析查询,即通过少量的维度对事实表的一个或多个数据列进行聚合查询。

    对于内存优化表,可以在表上创建Hash索引,

    • 哈希索引没有顺序,存储在内存中,是单行数据查询性能最高的索引类型。

    三,聚集索引和非聚集索引

    由于聚集索引实际上就是表,叶子节点是表数据,非叶子节点是索引的结构。

    非聚集索引实际上是建立在聚集索引的结构之上的,推荐先创建聚集索引,然后创建非聚集索引。

    四,索引的填充、重建和重组

    为了最大程度的从索引结构中获得高的查询性能,在创建索引时,应考虑填充,以减少页拆分(Page Split)的数量;数据的更新会导致索引碎片,需要重建或重组索引,以整理碎片,提高查询性能。

    推荐阅读:《索引调优 第一篇:重建、填充和查找》,《索引调优 第二篇:碎片整理

    参考文档:

    作者悦光阴
    本文版权归作者和博客园所有,欢迎转载,但未经作者同意,必须保留此段声明,且在文章页面醒目位置显示原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    最小生成树(prim算法)C语言实现
    图的十字链表存储(C语言)
    打算做一款给方便学生生活的APP,虽然已经有口袋小安了,但是并没有我想要的功能。。。
    腾讯云Ubuntu安装JDK和Tomcat
    新浪微博配图批量下载
    Algorithms in C第一章笔记
    Java笔记
    稍微记录一下effective c++的一些东西
    总结,并加油
    苹果Xcode帮助文档阅读指南
  • 原文地址:https://www.cnblogs.com/ljhdo/p/4554143.html
Copyright © 2020-2023  润新知