oracle 的低基数,Oracle选择性/基数

根据这个:

Selectivity is the value between 0 and 1, and it is the fraction of rows returned after applying a filter on the table.

For example if

a table has 10,000 rows and the query returns 2601 rows, the

selectivity would be 2601/10000 or .26 or 26 percent. Selectivity

enables you (or optimizer for that matter) to decide which data access

method is optimum in the execution plan.

我需要一些说明:好的,该表有10000行,查询只返回2601.但是,如果该查询块包含三个连接表,或者它包含where子句中的子查询,该怎么办?所以在FROM子句中有三个表,第四个表是where子句子查询的一部分,那么如何计算这个选择性呢?

选择性=满足条件的行数(从哪个表?)/总行数(来自所有四个表?)

基数的相同问题(基数=选择性*总行数).

我发现了许多关于此的文章,但是每个文章都使用基于单个表或单个where子句条件的简单select语句来说明这些概念.

有人能给我一个例子,说明如果有更复杂的查询(在“hr”模式或其他训练目的模式上),这些度量是如何计算的,这意味着FROM子句或WHERE子句中的子查询,等等?

谢谢.

编辑:

我需要对由Estimator(基于成本的优化器)计算的选择性度量做一些澄清.

http://gerardnico.com/wiki/database/oracle/selectivity

例如,对于等式谓词(last_name =’Smith’),选择性设置为last_name的不同值的数量n的倒数,因为查询选择的行包含n个不同值中的一个.

我不知道如何理解“不同值的数量n的倒数”.

假设employees表有107行,并且查询

代码:[全选] [显示/隐藏]

select * from employees where last_name =’Smith’

返回2行,选择性是2/107 = 0.01?所以它是满足谓词/总行数的行数.所以这个等式中没有“明显的”.

除了语句的这种选择性之外,还有一个列选择性,它由NDV(该列中的不同值的数量 – 可以从dba_tab_col_statistics查询)/总行数(http://www.runningoracle.com/product_info.php?products_id=233)表示.因此,如果NDV为103,则last_name列的选择性为103/107 = 0.96.

这就是我的理解……这是正确的吗?如果我错了,请纠正我.

谢谢.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值