更新数据库统计数据

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

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

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

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

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

ArcGIS 中有多种用于更新统计数据的方法。这些参数将在下面的章节中介绍:

使用分析数据集工具

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

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

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

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

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

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

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

更新所选表及其索引的统计数据。

运行 Python 脚本

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

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

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

./ 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 = arcpy.GetParameterAsText(0)

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

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

# Get a list of all the datasets the user has access to.
# First, get all the stand alone tables, feature classes and rasters.
dataList = arcpy.ListTables() + arcpy.ListFeatureClasses() + arcpy.ListRasters()

# 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("", "Feature"):
    arcpy.env.workspace = os.path.join(workspace,dataset)
    dataList += arcpy.ListFeatureClasses() + arcpy.ListDatasets()

# reset the workspace
arcpy.env.workspace = workspace

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

# remove any datasets that are not owned by the connected user.
userDataList = [ds for ds in dataList if ds.lower().find(".%s." % userName) > -1]

# 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")