优化器确定查询计划时,将给每个可能的计划分配一个成本,然后选择成本最低的那个计划。优化器分析若干因素以确定每个查询计划的成本。
优化器用来确定每个查询计划成本的一些因素为:
- 与每个文件系统访问相关联的 I/O 请求数
- 确定哪些行满足查询谓词所需的 CPU 工作
- 对数据进行排序或分组所需的资源
- 查询可用的内存量(由 DS_TOTAL_MEMORY 和 DS_MAX_QUERIES 参数指定)
要计算每个可能的查询计划的成本,优化器将:
- 使用描述表数据和索引的特性和物理特征的一套统计信息
- 检查查询过滤器
- 检查可在计划中使用的索引
- 使用移动数据的成本为分布式查询执行本地或远程连接
对于在跨服务器操作中访问远程表的查询,某些特征可以显著降低性能(这是相对于对本地数据库中的表和视图执行的相应 DML 操作而言)。那些可能会限制远程表性能的查询规范包括以下规范:
- ANSI LEFT OUTER JOIN 语法
- 基于远程表派生的表
- 作为引用远程表的具体化视图的 TEMP 表。
- 对远程视图的限制
- 对于涉及远程视图的查询的多次执行,可进行重新优化。即使启用语句高速缓存,优化器也不会从语句高速缓存中选取查询计划。