sql - 数据库系统如何知道特定列有多少个不同的值?

标签 sql database oracle

在以下链接

http://www.programmerinterview.com/index.php/database-sql/selectivity-in-sql-databases/

作者写道,由于“SEX”列只有两个可能的值,因此它对 10000 条记录的选择性是;根据给定的公式; 0.02%。

但我的问题是数据库系统如何知道这个特定列有这么多唯一值?数据库系统不需要至少扫描整个表一次吗?或者数据库系统会以其他方式了解这些唯一值?

最佳答案

首先,您应用的公式有误。性别的选择性(在给出的示例中)为 50% 而不是 0.02%。这意味着每个值大约有 50% 的时间出现。

数据库跟踪这一点的一般方法是使用一种叫做“统计”的东西。这些是关于所有表并由优化器使用的度量。有时,信息也可以通过列上的索引提供。

关于sql - 数据库系统如何知道特定列有多少个不同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20788324/

相关文章:

sql - 在 sqlplus 中转储函数或过程的主体

sql - 更新 varchar 中的最后 2 个字符

MySQL 将两个查询合并为一个查询

sql - 如何在SQL中实现链

sql - 数据库批量更新

mysql - 获取 mysql 中的下一条或即将到来的记录

sql - 从 Snowflake 中的表中选择随机百分比(使用 WHERE 子句时)

java - 在 MyBatis 中返回一个列表<MyClass>

sql - 如何获得 xmltype 的唯一分支作为 varchar?

java - 如何在存储过程中将 Java String 转换为 Oracle Clob