在生产环境中会遇到这样的场景,一个表随着时间的推移,越来越大,这个时候我们开始动手为这个表建立分区来改进查询性能。 但是表过大上百个G的时候,在数据仓库中,为了改进查询性能,我们可以添加在分区表的基础之上添加ColumnStore Index, 添加后,瞬间让10分钟的查询变身成几秒钟, 这是真实的。

  但是,当新的一年开始了,需要为这个大表添加新的分区,却是一件很耗时的事情,有一些坑,需要避免:

1. 在建立分区之初,如果按时间划分,则应该一次加上5-10年的,因为后续修改很麻烦

2.  在有ColumnStore Index的分区表上添加新的分区,步骤如下:

  • 添加新的文件组

    • ALTER DATABASE [AdvantureWorks]
       ADD FILEGROUP [FG_Email_2020]
      GO
  • 添加新的文件到相应的文件组中
    • ALTER DATABASE [AdvantureWorks]
       ADD FILE
       (
        NAME = [Email_2020],
        FILENAME = 'D:\OLTPDatabases\Data\AW_Email2020.ndf',
        SIZE = 512KB,
        FILEGROWTH = 1024MB
       ) TO FILEGROUP [FG_Email_2020]
  • 删除所有使用相同partition function的表上的ColumnStore Index
    • Drop index CCI_Email on dbo.Email
  • 修改Partition Scheme, 添加新的文件组
    • ALTER  PARTITION SCHEME [EmailYearlyPS]
      next used [FG_Email_2020]
      go
  • 修改Partition Function, split range , 就是添加新的划分值,如果新的值已经在旧的partition中,则需要先执行split range 把数据传到新的partition中, 然后再 alter partition scheme. 如果继续添加split range, 则继续添加
    • ALTER PARTITION FUNCTION [EmailYearlyPF] ()
      SPLIT RANGE (20200101)
  • 重新创建Column Store Index
    • CREATE CLUSTERED INDEX [CCI_FactClick]
          ON [dbo].[FactClick]([ClickId])
          ON [EmailYearlyPS] ([EmailGenerationDateKey]);
      CREATE CLUSTERED COLUMNSTORE INDEX [CCI_FactClick]
          ON [dbo].[FactClick] WITH (DROP_EXISTING = ON)
          ON [EmailYearlyPS] ([EmailGenerationDateKey]);

SQL Server 分区表上建立ColumnStore Index 如何添加新分区方法与步骤的更多相关文章

  1. SQL Server ->> 分区表上创建唯一分区索引

    今天在读<Oracle高级SQL编程>这本书的时候,在关于Oracle的全局索引的章节里面有一段讲到如果对一张分区表创建一条唯一索引,而索引本身也是分区的,那就必须把分区列也加入到索引列表 ...

  2. 009.Working with SQL Server LocalDB --【在sql server localdb 上操作数据】

    Working with SQL Server LocalDB 在sql server localdb 上操作数据 2017-3-7 2 分钟阅读时长 本文内容 1.SQL Server Expres ...

  3. 开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs

    原文:开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs 快速入门:使用 Docker ...

  4. 如何知道SQL Server机器上有多少个NUMA节点

    如何知道SQL Server机器上有多少个NUMA节点 文章出处: How can you tell how many NUMA nodes your SQL Server has? http://i ...

  5. SQL Server服务器上需要导入Excel数据的必要条件

    SQL Server服务器上需要导入Excel数据,必须安装2007 Office system 驱动程序:数据连接组件,或者Access2010的数据库引擎可再发行程序包,这样就不必在服务器上装Ex ...

  6. Tables without a clustered index are not supported in this version of SQL Server. Please create a clustered index and try again.

    问题: Azure Sql 在插入数据是出现“Msg 40054, Level 16, State 1, Line 2  Tables without a clustered index are no ...

  7. SQL Server跨服务器建立视图

    create view View_AppCus as select dwmch,zjm from ksoa.dbo.mchk SQL Server跨服务器操作经常需要用到,下面就为你介绍的是SQL S ...

  8. SQL SERVER分区表

    简介 分区表是在SQL SERVER2005之后的版本引入的特性.这个特性允许把逻辑上的一个表在物理上分为很多部分.而对于SQL SERVER2005之前版本,所谓的分区表仅仅是分布式视图,也就是多个 ...

  9. sql server 分区(上)

    分区发展历程      基于表的分区功能为简化分区表的创建和维护过程提供了灵活性和更好的性能.追溯到逻辑分区表和手动分区表的功能. 二.为什么要进行分区 为了改善大型表以及具有各种访问模式的表的可伸缩 ...

随机推荐

  1. Linux服务与进程状态

    linux进程的几个状态 Linux进程状态:R (TASK_RUNNING),可执行状态&运行状态(在run_queue队列里的状态) Linux进程状态:S (TASK_INTERRUPT ...

  2. React 轮播图实现

    接到项目, 用react和material-ui实现轮播图. 搜索了一些方法参考, 不论语言/框架的使用,大体上分为两种思路 超宽列表实现法 在原生JS或者JQuery中,轮播图的实现一般是这样子的 ...

  3. hibernate原生sql获取list<T>异常解决

    /** * <p>Title: getbigestMinIntegral</p> * <p>Description: 获取最大的MinIntegral(原则上即最高 ...

  4. Java 多线程 - 生产者消费者问题

    https://www.cnblogs.com/hckblogs/p/7858545.html

  5. day06 字典、元组、set的方法及常用操作

    今日内容: 1.深浅拷贝 2.元组 3.字典 4.set 1.深浅拷贝 # 1.值拷贝 # 采用赋值的方法进行 # 只会将堆区容器变量与栈区的绑定关系进行复制 # 2.浅拷贝 # 会将堆区与栈区的绑定 ...

  6. kubenetes_V1.14.0 安装部署

    k8s的安装有多种方式,如yum安装,kubeadm安装,kubemini安装,二进制安装(生产环境多采用此方式精确控制安装)等.本文是入门系列验证,之前进行过yum安装,可以查看文章<k8s入 ...

  7. go实现选择排序

    package main import "fmt" func SelectSort(data []int) { length := len(data) for i := 0; i ...

  8. Linux性能调优之gprof和oprofile

    为了更好的优化程序性能,我们必须找到性能瓶颈点,“好钢用在刀刃上”才能取 得好的效果,否则可能白做工作. 为了找到关键路径,我们可以使用profilng技术,在linux平台上,我们可以使用gprof ...

  9. GrayLog + Logspout + Docker 实现分布式日志聚合

    前提条件:你的服务器上已经安装了Docker和Docker Compose 一.安装GrayLog(Docker方式) version: '2' services: mongodb: image: m ...

  10. 高可用Redis(十二):Redis Cluster

    Redis Cluster是Redis官方提供的Redis集群功能 1.为什么要实现Redis Cluster 1.主从复制不能实现高可用 2.随着公司发展,用户数量增多,并发越来越多,业务需要更高的 ...