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

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 参考 » 使用 SQL » SQL 语言元素 » 搜索条件

 

显式选择性估计

SQL Anywhere 利用统计信息来确定每个语句最有效的执行策略。SQL Anywhere 会自动收集和更新这些统计信息。这些统计信息永久存储在数据库的系统表 ISYSCOLSTAT 中。处理一个语句时所收集的统计信息对于搜索后续语句的有效执行方式很有用。

有时候,统计信息可能变得不准确,或者相关的统计信息不可用。最有可能发生这种情况的时候是:添加、更新或删除了大量数据后,只执行了很少的查询。在这种情况下,最好执行 CREATE STATISTICS 语句。请参见CREATE STATISTICS 语句

如果某个特定的执行计划存在问题,可以使用优化程序提示来要求使用特定索引。有关详细信息,请参见FROM 子句

然而,在极少数情况下,这些措施可能无效。这种情况下,有时可以通过提供显式选择性估计来提高性能。

对于某个潜在执行计划中的每张表,优化程序必须估计将进入结果集的行数。如果您知道某条件的成功率与优化程序估计的不一样,可以在搜索条件中显式地提供用户的估计。

估计值是一个百分比。它可以是正整数,也可以包含小数部分。

小心

应尽量避免在持续使用的语句中提供显式估计。如果数据改变,显式估计可能会变得不准确并强制优化程序选择低效率的计划。如果您确实要使用显式选择性估计,那么请确保数字的精确性。例如,请不要提供值 0% 或 100% 来强制使用索引。

可以通过将数据库选项 user_estimates 设置为 Off 来禁用用户估计。user_estimates 的缺省值为 Override-Magic,这表示只有在优化程序对条件使用 MAGIC(缺省)选择性值时才可以使用用户提供的选择性估计。当优化程序无法准确预测一个谓语的选择性时,它的最后一个手段就是利用 MAGIC 值。

有关禁用用户定义的选择性估计的详细信息,请参见user_estimates 选项 [数据库]

有关统计信息的详细信息,请参见优化程序估计值和列统计信息

示例

以下查询估计 1% 的 ShipDate 值晚于 2001/06/30:

SELECT  ShipDate
   FROM  SalesOrderItems
WHERE ( ShipDate > '2001/06/30', 1 )
ORDER BY ShipDate DESC;

以下查询估计 0.5% 的行会满足条件:

SELECT *
   FROM Customers c, SalesOrders o
WHERE (c.ID = o.CustomerID, 0.5);

小数部分值为连接和大表提供了更准确的用户估计值。