Oracle选择性/基数
根据这个:
我需要一些说明:好的,该表有10000行,查询只返回2601.但是,如果该查询块包含三个连接表,或者它包含where子句中的子查询,该怎么办?所以在FROM子句中有三个表,第四个表是where子句子查询的一部分,那么如何计算这个选择性呢? 选择性=满足条件的行数(从哪个表?)/总行数(来自所有四个表?) 基数的相同问题(基数=选择性*总行数). 我发现了许多关于此的文章,但是每个文章都使用基于单个表或单个where子句条件的简单select语句来说明这些概念. 有人能给我一个例子,说明如果有更复杂的查询(在“hr”模式或其他训练目的模式上),这些度量是如何计算的,这意味着FROM子句或WHERE子句中的子查询,等等? 谢谢. 编辑: 我不知道如何理解“不同值的数量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. 这就是我的理解……这是正确的吗?如果我错了,请纠正我. 谢谢. 解决方法选择性总是基于当时正在应用的标准.这对于特定表的确切含义取决于连接顺序. Oracle将始终通过从其自己的特定表中选择行来开始执行查询.在这种情况下,根据您阅读的示例,选择性很简单.此时没有要考虑的连接条件. 接下来,它加入第二个表. Oracle估计有多少行只能直接满足该表的常量条件,以及第一个表中的任何连接条件.后者称为“连接选择性”. 然后,当加入第三个表时,它基于加入前两个表以及任何恒定条件来估计. 这是加入订单对计划如此重要的原因之一. (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |