Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.0 (中文) » SQL Anywhere 服务器 - SQL 的用法 » 查询优化与执行 » 优化程序的工作原理 » 优化程序估计值和列统计信息

 

选择性估计值来源

对于任何谓语,优化程序可以使用以下任何选择性估计值来源。查询的图形式计划和详细计划中会示出所选来源。

  • Statistics   优化程序可以使用存储的列统计信息来计算选择性估计值。如果谓语中使用了常量,那么仅当该常量的选择性是一个很高的数字时,存储的统计才可用。

    例如,如果 EmployeeID 列的统计信息存在,则谓语 EmployeeID > 100 可以使用列统计信息作为选择性估计值来源。

  • Join   优化程序可以使用参照完整性约束、唯一约束或连接直方图来计算选择性估计值。连接直方图通过对 T.X=R.X 形式的谓语从 T.X 和 R.X 列的可用统计信息计算。

  • Column-column   如果连接中没有参照完整性约束、唯一约束或连接直方图可用作选择性来源,优化程序可使用连接结果集中的估计行数与两个表笛卡尔乘积中的行数的商作为选择性来源。

  • Column   优化程序可以使用列统计信息中存储的所有值的平均值。

    例如,如果 expression 不是常量,则可使用平均值计算谓语 DepartmentName = expression 的选择性。

  • Index   优化程序可以查看索引以计算选择性估计值。一般情况下,如果没有其它选择性估计值来源(例如,列统计信息)可以使用,则可将索引用于选择性估计值。

    例如,对于谓语 DepartmentName = 'Sales',优化程序可以使用 DepartmentName 列中定义的索引来估算具有 Sales 值的行数。

  • User   如果 user_estimates 数据库选项未设置为 Disabled,优化程序可以使用用户提供的选择性估计值。请参见user_estimates 选项

  • Guess   当没有相关索引可以使用,没有为引用列收集统计信息或者谓语很复杂时,优化程序可以通过最佳推测以计算选择性估计值。这种情况下,将为每个谓语类型定义内置推测。

  • Computed   例如,非常复杂的谓语可以将选择性估计值设置为 100% 并将选择性来源设置为 Computed,比如通过对选择性执乘法或加法运算。

  • Always   如果谓语始终为 true,则选择性来源为 'Always'。例如,谓语 1=1 始终为 true。

  • Combined   如果通过组合多个上述来源来计算选择性估计值,则选择性来源为 'Combined'。

  • Bounded   如果 SQL Anywhere 已对选择性估计值设置了上限和/或下限,则选择性来源为 'Bounded'。例如,设置边界值以确保估计值不大于 100%,或选择性不小于 0%。

 另请参见