通过排除列优化性能

分析中包含未使用的列十分常见。不需要但仍选择的列会显著影响性能。本主题介绍如何通过删除不需要的任何列来提高性能。

识别未使用的列

在分析中包含已从视图中排除的列(例如)时,会通过以下方式影响性能:
  • 增加需要从数据库检索的数据量
  • 增加要检索和处理的列数
  • 迫使分析在多个聚合级别计算结果

下图显示了包含按区域和年列出的客户数的简单报表。

GUID-39B953E5-433E-4991-B3BA-BB1064CE8D83-default.jpg 的说明如下
.jpg 的说明

显示的报表是一个显示按区域列出的客户数的图形。您可以看到已排除了列。

GUID-CFF82673-4988-4185-915E-0F1AA5027E42-default.jpg 的说明如下
.jpg 的说明

包含未使用的“年”列的逻辑查询

虽然列未显示在视图中,但它仍被选择作为逻辑查询的一部分。

GUID-104759F4-A6F4-4366-ACD6-472BA2931E18-default.jpg 的说明如下
.jpg 的说明

在分析中包含列会产生以下影响:
  • 检索和处理额外的列。
  • 检索和处理额外的行,因为不仅按区域而且还按年选择客户数。
  • 需要进一步聚合。

包含未使用的“年”列的物理查询

如果查看物理查询,可以发现性能受影响的区域。

GUID-D9F85168-B448-49BE-9261-78270C01784C-default.jpg 的说明如下
.jpg 的说明

此示例显示基于客户数量聚合规则执行 SELECT count distinct 的情况。在某些情况下,还会影响应用总和聚合规则的报表。在这种情况下,生成的查询还使用分组集。在数据库级别,可能会选择许多行(百万行),然后必须按区域分组以及按区域分组。这可能会占用大量不必要的数据库资源。

删除未使用的列

删除列,并分析对生成的逻辑查询和物理查询的影响。

删除“年”列后的逻辑查询

现在,逻辑查询不包含列,更重要的是,删除了报表聚合。

GUID-A28E8FC3-37ED-4350-866C-A9BC58356833-default.jpg 的说明如下
.jpg 的说明

删除“年”列后的物理查询

物理查询现在简单得多,它不包含分组集,并且所选记录数大大减少。

GUID-96421968-C978-4383-853C-EAACB0079CEB-default.jpg 的说明如下
.jpg 的说明

通过查看非高效报表的分析,以及在第一个实例中直接删除多余的未使用列,可以发现性能显著提高。生成的物理查询复杂性降低了,并且返回的记录减少,因此需要处理的量随之减少。