gpt4 book ai didi

Oracle 选择性/基数

转载 作者:行者123 更新时间:2023-12-01 02:18:40 29 4
gpt4 key购买 nike

根据这个:

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子句子查询的一部分,那么这个选择性是如何计算的呢?

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

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

我找到了很多关于这方面的文章,但每篇文章都用简单的 select 语句举例说明了这些概念,基于单个表或单个 where 子句条件。

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

谢谢你。

编辑:
我需要对由 Estimator(基于成本的优化器)计算的选择性度量进行一些说明。
http://gerardnico.com/wiki/database/oracle/selectivity
例如,对于相等谓词 (last_name = 'Smith'),选择性设置为 last_name 的 n 个不同值的倒数,因为查询选择的行都包含 n 个不同值中的一个。

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

假设雇员表有 107 行,并且查询
代码:[全选] [显示/隐藏]

select * from员工 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。

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

谢谢你。

最佳答案

选择性始终基于当时应用的任何标准。

这对于特定表的确切含义取决于连接顺序。

Oracle 将始终通过自己从特定表中选择行来开始执行查询。在这种情况下,根据您阅读的示例,选择性很简单。此时没有要考虑的连接条件。

接下来,它加入第二个表。 Oracle 估计有多少行将直接满足该表的常量条件以及来自第一个表的任何连接条件。后者称为“连接选择性”。

然后,当加入第三个表时,它根据加入前两个表以及任何常数条件进行估计。

这是连接顺序对计划如此重要的原因之一。

关于Oracle 选择性/基数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22272165/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com