更新数据库统计数据

在 Standard 或 Advanced 许可等级下可用。

数据库管理系统优化器使用数据库统计数据为查询选择最优执行计划。 要维护查询性能,应在表内容发生显著更改之后(例如,将大量记录加载到表中或对表执行大量编辑之后)更新统计数据。

可对以下类型的表和索引更新统计数据:

  • 选择以进行分析的表及其相关索引
  • 版本化表和要素类的增量表,以及增量表的索引
  • 启用存档的数据集的历史存档表,以及存档表的索引
  • 地理数据库系统表
注:

更新数据库统计数据的操作会消耗巨大的输入/输出 (I/O) 资源。 应在数据库流量最低时更新统计数据。

ArcGIS 中有多种用于更新统计数据的方法。 将在以下部分中对此进行介绍:

使用分析数据集工具

您可以使用分析数据集地理处理工具(位于“数据管理”工具箱的“地理数据库管理”工具集中)来更新统计数据。 该工具允许选择用于分析的数据集中的表,并允许地理数据库管理员更新地理数据库系统表中的统计数据。

您必须以要分析的表的所有者身份运行该工具。 就地理数据库系统表而言,您必须以地理数据库管理员身份运行该工具。 您应该在向地理数据库添加许多新表或要素类、执行大量版本化编辑或压缩地理数据库之后,更新地理数据库系统表中的统计数据。

  1. 启动 ArcGIS Pro 客户端,并连接到包含要更新统计数据的表的地理数据库中。

    以所分析表的所有者身份进行连接。

  2. 打开分析数据集地理处理工具。

    可以在搜索字段中输入工具名称以找到该工具并打开,或导航至“数据管理”工具箱中的“地理数据库管理”工具集。

  3. 使用之前在第 1 步中创建的数据库连接文件作为输入工作空间。
  4. 选中要进行分析的表:
    • 如果想要更新所选基表的统计数据,则保持分析所选数据集的基表处于选中状态。
    • 选中分析所选数据集的增量表,以更新版本化数据集的添加表和删除表中的统计数据。
    • 选中分析所选数据集的存档表,以更新启用存档的数据集的历史存档表中的统计数据。
    • 选中包括系统表以更新地理数据库系统表中的统计数据。 请注意,只有以地理数据库管理员的身份连接到地理数据库时才能执行该操作。
  5. 单击运行

将针对所选表及其索引更新统计数据。

运行 Python 脚本

可在 Python 脚本中调用 AnalyzeDatasets_management 函数来更新基表、增量表、存档表或地理数据库系统表中的统计数据。 如同使用分析数据集工具一样,您必须以要分析的表的所有者身份运行 AnalyzeDatasets_management

运行以下 Python 脚本时,指定数据库连接文件(.sde 文件)。 脚本将更新连接中指定用户拥有的所有表的统计数据。

例如,要使用位于 /usr/connections 中的数据库连接文件 entgdb.sdeLinux 上运行此脚本,请输入以下内容:

./ AnalyzeDatasets.py /usr/connections/entgdb.sde

要运行该脚本以更新系统表中的统计数据,请指定以地理数据库管理员身份连接的连接文件。

# Name: AnalyzeDatasets.py
# Description: analyzes all datasets in an enterprise geodatabase
#              for a given user.

# Import system modules
import arcpy
import os

# set workspace
# the user in this workspace must be the owner of the data to analyze.
workspace = "C:\\MyProject\\MyDataConnection.sde"

# set the workspace environment
arcpy.env.workspace = workspace

# NOTE: Analyze Datasets can accept a Python list of datasets.

# Get the user name for the workspace
userName = arcpy.Describe(workspace).connectionProperties.user

# Get a list of all the datasets the user owns by using a wildcard that incldues the user name
# First, get all the stand alone tables, feature classes and rasters.
dataList = arcpy.ListTables(userName + "*") + arcpy.ListFeatureClasses(userName + "*") + arcpy.ListRasters(userName + "*")

# Next, for feature datasets get all of the datasets and featureclasses
# from the list and add them to the master list.
for dataset in arcpy.ListDatasets(userName + "*", "Feature"):
    arcpy.env.workspace = os.path.join(workspace,dataset)
    dataList += arcpy.ListFeatureClasses(userName + "*") + arcpy.ListDatasets(userName + "*")

# reset the workspace
arcpy.env.workspace = workspace

# Execute analyze datasets
# Note: to use the "SYSTEM" option the workspace user must be an administrator.
arcpy.AnalyzeDatasets_management(workspace, "NO_SYSTEM", dataList, "ANALYZE_BASE","ANALYZE_DELTA","ANALYZE_ARCHIVE")
print("Analyze Complete")