【问题标题】:Oracle SQL Developer: Calculating SelectivityOracle SQL Developer:计算选择性
【发布时间】:2014-04-13 03:29:19
【问题描述】:

我有一个名为 FANS 的表,其中存储了各种人的人口统计信息,包括姓名、地址和出生日期。该表本身包含 7,655 行数据。我在 CITY 列上创建了一个索引。我可以肯定地知道表中只有 40 个独特的城市,并且没有 NULL 值。我正在尝试对优化器何时开始使用 INDEX 进行简单的实验。

SELECT CITY
FROM FANS
WHERE CITY BETWEEN 'APOLLO BEACH' AND 'BRANDON';

我之前从 MySQL 中了解到选择性 = 基数 / 记录数 * 100%,其中基数是索引中唯一值的数量。

当我在 SQL 开发人员中运行“解释计划”时,它返回的基数为 500。因此正确的数学应该是 500 / 7,655 * 100%?

【问题讨论】:

标签: sql oracle


【解决方案1】:

Oracle 查询计划中的cardinality 是优化器估计将由计划的特定步骤返回的行数。所以,是的,优化器估计表中 500/7655 = 6.53% 的行将匹配您的谓词。

如果这 40 个 CITY 值不是均匀分布的,您可能希望在 CITY 列上有一个直方图,以帮助优化器做出更准确的基数估计。

【讨论】:

    猜你喜欢
    • 2021-10-13
    • 1970-01-01
    • 2012-12-30
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 2018-11-26
    相关资源
    最近更新 更多