Oracle SQL Developer:计算选择性

时间:2014-04-12 16:42:54

标签: sql oracle

我有一个名为FANS的表,用于存储各种人的人口统计信息,包括姓名,地址和DOB。该表本身包含7,655行数据。我在CITY列上创建了一个INDEX。我确切知道表中只有40个独特的城市,并且没有NULL值。我试图在优化器何时开始使用INDEX时进行简单的实验。

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

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

当我跑步"解释计划"在SQL开发人员中,它返回500的基数。因此正确的数学将是500 / 7,655 * 100%?

1 个答案:

答案 0 :(得分:1)

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

如果40个CITY值未均匀分布,您可能希望在CITY列上设置直方图,以帮助优化程序进行更准确的基数估算。