---
order: 1
navTitle: 数据仓库性能优化
---
# 数据仓库性能优化

大数据量的数据加工或分析查询中常常会遇到性能问题，导致数据加工执行耗时长、报表查询响应慢，而数据仓库的性能优化往往是一件极其复杂的工作，不仅需要具备专业的数据库优化技能，还要熟悉掌握整个数据仓库的架构、模型建设等情况。传统的DBA人员往往只能掌握一种或两种数据库的优化技术，而且对企业全局的数据仓库架构和系统业务知之甚少，随着BI产品的应用，更是难以应对灵活多变的即席分析。

SuccBI在产品层面将数据仓库中性能优化的三个层次：即数据仓库架构、数据模型、数据库底层，融为一体，综合治理和管控，同时利用产品平台的天然优势，在优化上智能的融合了业务的理解，提升了优化的针对性和有效性。

SuccBI性能优化功能均支持通过可视化的操作配置过程来完成，无需掌握数据库优化相关命令，同时也屏蔽了不同类型数据库实现上的差异，提供给用户完全统一的使用体验。

SuccBI支持多种性能优化方式，如[聚集](#agg)、[子集](#subset)、[索引](#index)、[分区](#partition)、[预连接](#pre-connect)、[表分析](#table-analyze)、[Elasticsearch检索](#es)等

<!--
什么是性能优化？
什么时候需要性能优化？
性能优化的方式有哪些？
产品是如何支持性能优化的？有何优势？
-->

## 聚集{#agg}

保存最细粒度的原始表称为基础表，而聚集表是对原始表中某个或某几个维度进行汇总而产生的汇总表。汇总的强度越大（颗粒越粗），聚集表中的数据量就越小，查询的速度就越快。在所有提高数据仓库性能的方法中，建立聚集表是最有效的一种方法。\
SuccBI以数据仓库维度建模理论为根基，融合了聚集模型在大量大数据项目中实践应用的经验，在产品层提供了简单易用且智能化的聚集优化功能。

[更多聚集管理介绍>>](https://docs.succapp.com/v5/data-gov/agg-management)

<!--
其具备如下特点：  
  * **自定义聚集表**  

  * **自动推荐聚集表**  

  * **智能聚集导航**  

  * **聚集模型自动调度**  
-->

## 子集{#subset}

数据子集是基于数据模型表和数据加工表进行过滤、排序、选择字段等操作后的子集，它是一个更接近具体业务的数据集合，在数据仓库中它有另外一个名称，即切片。在OLAP应用中，数据子集能将大表查询转换为小表查询，这样用户在较频繁的查询某个特定条件下的数据时能有效提升查询效率。\
SuccBI支持的数据子集在一定意义上扩展了数据仓库中传统的切片。

[更多子集管理介绍>>](https://docs.succapp.com/v5/data-gov/subset-management)

<!--
其具备如下功能：  
  * **自定义任意子集**  

  * **设置抽样系数**  

  * **可选择的物化数据子集**  

  * **智能导航数据子集**  

  * **可设置模型的默认子集**  
-->

## 索引{#index}

索引是一种数据结构，能够帮助用户快速的检索数据库表中的数据。索引在数据库层面的优化中占据着举足轻重的地位。一般对于查询概率比较高，经常作为where条件的字段设置索引。常见的索引类型有唯一索引、组合索引、反向键索引、位图索引、函数索引等。\
SuccBI支持对索引进行集中管理和监控。

[更多索引管理介绍>>](../data-gov/model/model-index.md)

<!--
其具备如下功能：    
  * **创建管理各种类型的索引**  
    包括索引的新增、删除、禁用、占用空间情况、是否写入日志等  

  * **监控模型索引命中率**  
    所谓索引命令率，即在系统运行中，索引是否有效的被数据库优化器所采纳使用以提高访问表的效率。  

  * **智能推荐索引**  
    SuccBI通过分析所有访问表的SQL语句的特征，结合不同数据库优化器的特性，通过内部推荐算法智能的给用户推荐有效的索引策略。  

-->

## 分区{#partition}

分区技术是数据库层面的一种常见的优化手段，其采用的是“分而治之”的思想，它根据`分区键`将一个表物理的分解为多个更小的、更易管理的部分，但在逻辑上仍然是一张表。分区非常适用于数据仓库的大表优化，如根据`年月`分区键将数据表划分成若干个物理分区，在BI的报表分析中按年月来查询时，数据库能自动定位到目标物理分区，提高访问数据的效率。常见的分区方式有范围分区、散列分区、列表分区及自增长分区等。\
SuccBI支持模型的分区优化。

[更多分区管理介绍>>](https://docs.succapp.com/v5/data-gov/partition-management)

<!--
其具备如下功能：    
  * **创建管理分区**  
  
  * **统计分区信息**  

  * **导出分区详情**  

-->

## 预连接{#pre-connect}

预连接是通过对事实表和维度表的联合查询而生成的一类汇总表，在预连接表中保存有维度表中的描述信息和事实表中的事实值。通过预连接，可以避免用户查询时数据库产生表连接操作，所以预连接表的查询效率要高很多。\
SuccBI在加工模型中支持预连接表。

[更多预连接管理介绍>>](https://docs.succapp.com/v5/data-gov/pre-connect)

<!--
其有如下功能：  

  * **自动生成预连接表**  

  * **聚集导航器智能理解运用**  
-->

## 表分析{#table-analyze}

数据库在执行SQL时会先根据表的统计信息来确定表的访问方式生成执行计划。但表的统计信息并非实时更新，过旧的统计信息可能会直接导致SQL解析时生成错误且低效的执行计划，从而严重影响系统的运行效率。

统计信息的更新需要在数据库层面设置定时的采集任务，该采集任务一般是针对全库或者某个用户，难以实现表级别的采集任务调度，同时传统的定时采集任务往往会与数据仓库的ETL时间窗口发生冲突，导致既占用了数据库服务器资源，又可能采集到错误的统计信息。

SuccBI基于产品平台的优势，能更好更有效的管理调度表分析。

[更多表分析管理介绍>>](https://docs.succapp.com/v5/data-gov/table-analyze)

<!--
其具备如下功能：  

  *  **细粒度化管理**  
    轻松实现全数据仓库模型的表级别统计信息更新任务的管理，让表分析采集任务分散在不同时间窗口执行，避免了集中执行对资源的高消耗。

  *  **智能调度，避开ETL时间窗口**  
    系统能轻松捕获数据仓库中数据加工的时间窗口，从而有效的避开，同时可识别当前系统的负载情况，智能安排调度。
-->

## Elasticsearch检索{#es}

<!-- 
ES检索用来优化对模型中文本字段的全文检索能力。  

传统数据库的关键词搜索功能非常有限，绝大多数情况下只能使用`like '%%'`的方式实现简单的全词匹配功能，具有很多缺点且无法满足用户多样性的搜索需求：  
  1. 海量数据的大文本字段检索非常低效
  2. 不能进行全文搜索
  3. 不能根据搜索相关性排序
  4. 不能进行输入纠错处理

为此SuccBI数据模块在性能优化中集成了当前主流的分布式全文检索引擎Elasticsearch的搜索功能，用户可以通过ES检索轻松的管理模型在ES中的索引，模型应用时只需要一键切换数据源即可获得ElasticSearch强大的全文检索能力。   -->

Elasticsearch检索是指SuccBI在产品层集成了Elasticsearch搜索引擎，你可以通过创建[Elasticsearch模型](https://docs.succapp.com/v5/data-gov/elasticsearch-model)将Elasticsearch索引当做普通表一样轻松的管理起来。

借助Elasticsearch，SuccBI可以提供给你应对海量数据[全文检索](./full-text-search.md)的能力。
