对于潜在执行计划中的每个表,优化程序估计到将形成部分结果的行数。该行数取决于表的大小以及查询的 WHERE 子句或 ON 子句中的限制。
给定某一列的直方图后,SQL Anywhere 会估计满足该列上的给定查询谓语的行数,其方法是累加与满足指定谓语的值相重叠的所有值域中的行数。对于直方图中部分包含在查询结果集中的值域,SQL Anywhere 将使用该值域内的内插值。
通常,优化程序会使用更为复杂的启发式算法。例如,只有在没有更合适的统计信息时,优化程序才使用缺省估计值。另外,优化程序还会利用索引和键来改进它对行数的推测。下面是一些单列的示例:
使某列等于某个值:当该列具有唯一索引或者为主键时估计一行。
索引列与常量的比较:探测索引以估计满足比较条件的行的百分比。
使某个外键等于某个主键(键连接):使用关系表大小确定估计值。例如,如果一个有 5000 行的表具有一个外键,该外键引用一个有 1000 行的表,则优化程序会推测:对于每个主键行存在五个外键行。
![]() |
使用DocCommentXchange 讨论此页。
|
版权 © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |