在某些情况下,您可能希望对特定连接列运行带有 HIGH 关键字的 UPDATE STATISTICS 语句。
由于为建立更好的查询计划而进行了性能提高和经调整的成本估计,优化器在某些情况下很大程度地依赖于对基础数据分发的精确了解。
即使已遵循了
创建数据分发中的准则,您可能仍然觉得复杂查询执行得不够快。如果您的查询包含等式谓词,请执行以下操作之一:
- 对于在查询的 WHERE 子句中出现的特定连接列,将 UPDATE STATISTICS 语句与 HIGH 关键字一起运行。如果遵循了创建数据分发中的准则,那么索引起始列已具有 HIGH 方式分布。
- 要确定不是索引起始列的列的 HIGH 方式分发信息是否能够提供更好的执行路径,请执行以下步骤:
要确定连接列上的 UPDATE STATISTICS HIGH 是否重要,请执行以下操作:
-
发出 SET EXPLAIN ON 语句并重新运行查询。
-
注意 SET EXPLAIN 输出中的估计行数和查询返回的实际行数。
-
如果这两个数字差别很大,那么对参与连接的列运行 UPDATE STATISTICS HIGH,除非已执行了此操作。
要点: 如果表非常大,那么使用 HIGH 方式执行 UPDATE STATISTICS 可能会花费很长时间。
以下示例显示包含连接列的查询:
SELECT employee.name, address.city
FROM employee, address
WHERE employee.ssn = address.ssn
AND employee.name = 'James'
在该示例中,连接列是 employee 中和 address 表中的 ssn 字段。
这两列的数据分发必须精确地反映实际数据,这样优化器可以正确地确定最好的连接计划和执行顺序。
对于当前数据库外部的表,您不能使用 UPDATE STATISTICS 语句创建数据分发。有关数据分发和 UPDATE STATISTICS 语句的更多信息,请参阅
GBase 8s SQL 指南:语法。