Oracle 执行计划(2)-基数 cardinality

Oracle数据库sql优化基本概念:基数与选择性 在数据库性能优化的过程中,理解并正确估计基数和选择性对于数据库管理员来说十分重要,它们直接影响到索引的创建和维护、查询计划的选择以及整个系统的性能表现。同时,由于Oracle并不直接支持在一个查询中直接计算列的选择性,所以这里采用了一个临时结果集(CTE)的方式来分步计算。基数(Cardinality)与选择性(Selectivity)是数据库理论和SQL优化领域中的两个重要概念,特别是在关系型数据库管理系统(如Oracle、MySQL等)中用于评估查询效率和索引效果的关键指标。上述脚本首先分别计算了。 阅读详情

Oracle  执行计划(2)-基数

执行计划的cardinality列。基数是说从数据表,结果集或者索引返回多少行数据。

基数=表行数据*选择率。所以讲基数重点是讲选择率,选择率的计算!

版本10G 默认 表空间信息:

TABLESPACE_NAME

USERS

BLOCK_SIZE

8192

EXTENT_MANAGEMENT

LOCAL

ALLOCATION_TYPE

SYSTEM

SEGMENT_SPACE_MANAGEMENT

AUTO

DEF_TAB_COMPRESSION

DISABLED

BIGFILE

NO

 

比如我们建个表

Create table  student ( id number,name varchar2(50),birday date,month_no number(2));

insert into student
select
trunc(dbms_random.value(
1,1200)) id,
a.object_name,
sysdate-rownum as birday,
trunc(dbms_random.value(
1,13)) month_no
from all_objects a
where rownum<=
1200

分析下

SQL> analyze table student compute statistics;

看看数据分布

select month_no ,count(1) from student group by month_no;

MONTH_NO

COUNT(1)

1

104

2

87

3

100

4

91

5

114

6

102

7

102

8

96

9

100

10

114

11

97

12

93

数据分布得比较均匀

看看表列的情况:

select * from user_tab_col_statistics where table_name='STUDENT'

 

TABLE_NAME

COLUMN_NAME

NUM_DISTINCT

LOW_VALUE

HIGH_VALUE

DENSITY

NUM_NULLS

NUM_BUCKETS

AVG_COL_LEN

STUDENT

ID

762

C102

C20C61

0.00131233595800525

0

1

3

STUDENT

NAME

1192

41434345535324

5741524E494E475F53455454494E475324

0.000838926174496644

0

1

14

STUDENT

BIRDAY

1200

786C0C1F100D2E

7870040D100D2E

0.000833333333333333

0

1

7

STUDENT

MONTH_NO

12

C102

C10D

0.0833333333333333

0

1

2

 

列名解释:

1 NUM_DISTINCT  该列有多少个不同的值,非空.

2 LOW_VALUE     该列最小值

3 HIGH_VALUE    该列最大值

4 DENSITY       该列密度 如果有直方图的话才有此值计算

5 NUM_NULLS       该列空置多少

6 NUM_BUCKETS  该列采用直方图用多少桶

7 AVG_COL_LEN  该列平均长度

 

select * from user_tables where table_name='STUDENT'

AVG_ROW_LEN

NUM_ROWS

EMPTY_BLOCKS

BLOCKS

33

1200

3

13

表信息: 分别是平均长度,数据行数,空块数,全部块数。

 

OK 我们把数据搞定了!接下来就可以谈谈选择率了,看下这样的语句的执行计划。

 

SQL> set autotrace on

SQL> select count(*) from STUDENT where month_no=12;

  COUNT(*)

----------

        93

已用时间:  00: 00: 00.01

执行计划

----------------------------------------------------------

Plan hash value: 4030891848

------------------------------------------------------------------------------

| Id  | Operation          | Name    | Rows  | Bytes | Cost (%CPU)| Time     |

------------------------------------------------------------------------------

|   0 | SELECT STATEMENT   |         |     1 |     2 |     4   (0)| 00:00:01 |

|   1 |  SORT AGGREGATE    |         |     1 |     2 |            |          |

|*  2 |   TABLE ACCESS FULL| STUDENT |   100 |   200 |     4   (0)| 00:00:01 |

------------------------------------------------------------------------------

 

SQLPLUS环境里的ROWS就是基数

 

实际有93行而计划里说有100行,根据公式 基数=行数*选择率。那么选择率=基数/行数 => ?=100/1200=1/12.

执行计划是根据统计信息来计算,来估算返回行的数量。

选择率=1/ NUM_DISTINCT 或者是DENSITY 。 返回上面看看表列的信息中的值。这就是基本选择率。

 

1 有空值情况下的选择率

  把每个月的生日置空10 共120.

update student set month_no =null where month_no=1 and rownum<=10;

…

update student set month_no =null where month_no=12 and rownum<=10;

 

 再度分析下表,并查看表列信息,可以看到month_no列NUM_NULLS=120

再次运行上面的语句得到执行计划:

SQL> select count(*) from STUDENT where month_no=12;

  COUNT(*)

----------

        83

已用时间:  00: 00: 00.00

执行计划

----------------------------------------------------------

Plan hash value: 403089184

------------------------------------------------------------------------------

| Id  | Operation          | Name    | Rows  | Bytes | Cost (%CPU)| Time     |

------------------------------------------------------------------------------

|   0 | SELECT STATEMENT   |         |     1 |     2 |     4   (0)| 00:00:01 |

|   1 |  SORT AGGREGATE    |         |     1 |     2 |            |          |

|*  2 |   TABLE ACCESS FULL| STUDENT |    90 |   180 |     4   (0)| 00:00:01 |

 

这里的基数变成了90了

公式 选择率=基本选择率*(num_rows-num_nulls)/num_rows。

这里的基本选择率是1/num_distinct 因为使用了= 的条件。

公式推导 =>  ?=1/12*(1200-120)/1200=0.075

基数=1200*0.075 =90

 

2 使用列表 in(…)

  1 回滚 update student set month_no=12 where month_no is null and rownum<=10;

  2 分析表

  3 查看表列信息 发现NUM_NULLS 变回了0值。

4  执行语句:select count(*) from STUDENT where month_no in(6,7,8);

SQL> select count(*) from STUDENT where month_no in(6,7,8);

  COUNT(*)

----------

       300

已用时间:  00: 00: 00.00

执行计划

----------------------------------------------------------

Plan hash value: 4030891848

------------------------------------------------------------------------------

| Id  | Operation          | Name    | Rows  | Bytes | Cost (%CPU)| Time     |

------------------------------------------------------------------------------

|   0 | SELECT STATEMENT   |         |     1 |     2 |     4   (0)| 00:00:01 |

|   1 |  SORT AGGREGATE    |         |     1 |     2 |            |          |

|*  2 |   TABLE ACCESS FULL| STUDENT |   300 |   600 |     4   (0)| 00:00:01 |

 

公式=基本选择率+基本选择率+基本选择率= 3/12

如果in(15) or in(15,16) 基数分别 73,146 而不是100,200. 因为超过最大值,当超过最大与最小值距离(11) 为0.

距离15-12=3  间距12-1=11 平均递减100/11=9.09  15的基数100-(3*9.09)=72.73=73。这说明ORACLE衰减思想。

 

3 区间谓词的选择率

  1 month_no >8 ,>=8,<8,<=8

  2  between 6 and 9

  3  >=6 and <=9; >=6 and <9; >6 and <=9 ; >6 and <9

  4 >12

  5 between 25 and 30

  6 >=:val1,>  <  <=:val1 绑定变量

  7 >= :val1 and <= :val2  between :val1 and :val2

公式=需要空间除以可用空间

  可用空间=high_vlaue-low_value=12-1=11

需要空间=(high_vlaue-limit) 或(limit-low_value)或(high_vlaue-low_value)

1 month_no>8 (high_vlaue-limit)/(high_vlaue-low_value)=(12-8)/11=4/11

2 month_no>=8 因为=是基本选择率 1/12 因此  4/11+1/12

3 month_no < 8 小于用最小值 上面大于用最大值 (limit-low_value) /(high_vlaue-low_value)=(8-1)/11=7/11

4 between 6 and 9  or  >=6 and <=9: (9-6)/(12-1)+1/12+1/12

5 (>=6,<9) (6>,<=9) :(9-6)/(12-1)+1/12 

6 >6 and < 9        :(9-6)/(12-1)

7 >=:val1  固定选择率5%

8 >=:val1 and <=:val2  固定比率 2.5%

9 超过范围将逐步衰减。

 

 

4 双谓词

 1 month >8 or month <=8

 2 month >8 and month<=8

谓词1的选择率(12-8)/(12-1)=4/11=0.363636364

谓词2的选择率 (8-1)/(12-1)+1/12=7/11+1/12=0.71969697

公式 1 (谓词1 AND 谓词2)= 谓词1选择率*谓词2的选择率 因此第2个是 4/11*(7/11+1/12)= 0.261707989

公式 2 (谓词1 or 谓词2)= 谓词1选择率+谓词2的选择率-(谓词1选择率*谓词2的选择率)

=4/11+((7/11+1/12)-( 4/11*(7/11+1/12)))

=0.363636364+0.71969697- 0.261707989

=0.821625344

基数=1200*0.821625344=985.9504128=986

看下执行计划:

SQL> select count(*) from student where month_no >8 or month_no<=8;

  COUNT(*)

----------

      1200

已用时间:  00: 00: 00.01

执行计划

----------------------------------------------------------

Plan hash value: 4030891848

------------------------------------------------------------------------------

| Id  | Operation          | Name    | Rows  | Bytes | Cost (%CPU)| Time     |

------------------------------------------------------------------------------

|   0 | SELECT STATEMENT   |         |     1 |     2 |     4   (0)| 00:00:01 |

|   1 |  SORT AGGREGATE    |         |     1 |     2 |            |          |

|*  2 |   TABLE ACCESS FULL| STUDENT |   986 |  1972 |     4   (0)| 00:00:01 |

------------------------------------------------------------------------------

Oracle优化器 Cardinality基数与Selectivity选择性 优化器(optimizer)是oracle数据库内置的一个核心子系统。优化器的目的是按照一定的判断原则来得到它认为的目标SQL在当前的情形下的最高效的执行路径,也就是为了得到目标SQL的最佳执行计划。依据所选择执行计划时所用的判断原则,oracle数据库里的优化器又分为RBO和CBO两种。 一、基于规则的优化器。《RBO: Rule-Based Optimization》      Oracle会在代码里事先为各种类型的执行路径定一个等级,一共15个等级,从等级1到等级15,oracle认为等级1的执行路径是效率最高的,等级15是执行效率最差的。对于等级相同的执行计划,oracle根据目标对象 立即下载

相关推荐

【Agent】多智能体框架MetaGPT入门教程

创建一个 Action 类的子类 SimpleWriteCode,子类中定义好 prompt,并解析返回结果。在 MetaGPT 中,

酒酿小圆子呀~ 3133

Oracle 执行计划(2)-基数 cardinality【即估算一个操作返回的行数】

Oracle 执行计划(2)-基数 cardinality 执行计划的cardinality列。基数是说从数据表,结果集或者索引返回多少行数据。 基数=表行数据*选择率。所以讲基数重点是讲选择率,选择率的计算! 版本10G 默认 表空间信息: TABLESPACE_NAME USERS BLOCK_SIZE 8192

haiross的专栏 9672

[A-21]ARMv8/v9-SMMU系统架构和功能概述

本文简述了SMMU的系统架构和核心功能

基层架构师的分享 1723

执行计划的cardinality基数(rows)评估

执行计划的cardinality基数(rows)评估: 执行计划的cardinality列(基数)是说从数据表结果集或者索引返回多少行数据。 基数=表行数据*...

cuimiwan3140的博客 1495

Flotherm XT学习历程

大家好,通过半年的热仿真软件学习使用,最终发现最好用,最好上手的软件就是Flotherm XT,对新手非常友好,但由于软件近几年才发布,网上教程非常少,后面我将在这里持续分析软件使用心得,和大家一起学习。

xiaoredred的博客 6255

Docker网络冲突?手把手教你解决Dify社区版无法访问172.18.0.0网段的问题

本文详细解析了在部署Dify社区版时,因Docker默认网段与局域网冲突导致无法访问172.18.0.0网段的问题。通过剖析Docker网络原理,提供了修改Docker守护进程默认地址池的根治方案,并介绍了在Compose文件中指定自定义网络等备选方法,帮助用户彻底解决网络冲突,保障服务稳定运行。

p8q9r0的博客 484

oracle cardinality简析

此hint的作用 向优化器提供对某个查询语句的整体或部分的预测基数值,并通过参考该基数值来为查询语句制定执行计划。如果在该提示中没有指定表的名称,则该基数值将被视为从该查询语句所获得的最终结果行数。 针对单个目标表而言: 生效路径: 全表扫; 索引范围扫,索引全扫描fs,索快速扫描ffs create index emp_ename_idx on emp(ename); --全表扫...

u011165335的博客 4029

Python小白避坑指南:用Ursina做3D图形,Entity的scale和color参数到底怎么调才不出错?

本文详细解析了Python Ursina引擎中Entity对象的scale和color参数调优技巧,帮助3D图形编程初学者避开常见陷阱。通过对比实验和典型场景分析,深入讲解三种缩放方式的区别、颜色定义的四种方法,以及参数组合的协同效应,助力开发者精准控制3D图形表现。

weixin_26782929的博客 412

基数反馈(Cardinality Feedback)

基数反馈(Cardinality Feedback) Cardinality Feedback Cardinality Feedback基数反馈是版本11.2(11.2.0.1及以后)中引入的关于SQL 性能优化的新特性,该特性主要针对 统计信息陈旧、无直方图或虽然有直方图但仍基数计算不准确的...

weixin_33883178的博客 217

ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory解决方案

本文主要介绍了ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory解决方案,希望能对使用Python的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 11万+

智能水下机器人设计: 基于MATLAB的水下机器人动力学建模和控制系统设计,包括水下环境感知、路径规划和任务执行等

智能水下机器人是指能够在水下自主完成各种任务的机器人,例如探测、勘察、救援等。它具有广阔的应用前景,可用于海洋环境监测、水下考古、海上作业等领域。基于MATLAB的水下机器人设计可以为科研人员和工程师提供强大的建模和仿真工具,帮助他们设计更智能、更高效的水下机器人。智能水下机器人是未来海洋科技发展的重要方向,它将为海洋科学研究、水下考古和海上作业等领域带来新的机遇。MATLAB是一种功能强大的数学和科学计算软件,它可以为智能水下机器人设计提供强大的工具和支持。

走向CTO的路上... 957

【DB笔试面试642】在Oracle中,什么是基数反馈(Cardinality Feedback)?

♣题目部分在Oracle中,什么是基数反馈(Cardinality Feedback)? ♣答案部分基数反馈(Cardinality Feedback,CFB)...

小麦苗DBA宝典 1012

【入门AUTOSAR网络管理测试】AUTOSAR网络管理规范需求解读

AUTOSARAutomotive Open System Architecture,汽车开放系统架构,由全球汽车制造商、部件供应商及其他电子、半导体和软件系统公司联合建立,致力于制定汽车电子软件标准的联盟。网络管理网络管理的目的是使网络中的ECU节点有序的睡眠和唤醒。在没有通信需求的时候睡眠,在需要通信的时候唤醒,可以节约汽车电池的电量。

测试领域技术分享 5162

【Oracle 优化器】基数反馈 (Cardinality Feedback)功能

本文将介绍在11gR2的版本上推出的基数反馈(Cardinality Feedback 以后简称CFB)功能。

SQLplusDB的小院 9642

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

ORALCE11G新特性之Cardinality Feedback

ORALCE11G新特性之Cardinality Feedback 概述 在Oracle11gR2的版本上推出了基数反馈(Cardinality Feedback 以后简称CFB)功能,通过这个特性,对于某些查询在第一次执行时,如果CBO发现根据统计信息估算出的基数(Computed cardinality)和SQL执行时的实际值差距很大的情况发生时,在SQL下次执行时,会根据实际值调整基数,...

oradbm的博客 1019

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Oracle数据库11G新特性-Cardinality Feedback

ORALCE11G新特性之Cardinality Feedback 概述 在Oracle11gR2的版本上推出了基数反馈(Cardinality Feedback 以后简称CFB)功能,通过这个特性,对于某些查询在第一次执行时,如果CBO发现根据统计信息估算出的基数(Computed cardinality)和SQL执行时的实际值差距很大的情况发生时,在SQL下次执行时,会根据实际值调整基数,重新生成执行计划。 Cardinality Feedback基数反馈是版本11.2(11.2.0.1及以后)中.

oradbm的博客 833

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Oracle优化器之基数反馈(CardinalityFeedback)功能

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34082789的博客 835

Cardinality Feedback执行计划基数反馈

是 Oracle 数据库中的一种优化器特性,用于在查询执行过程中自动调整和优化查询计划的基数估计。基数(Cardinality)是指查询操作返回的行数估计值。优化器在生成执行计划时依赖基数估计来选择最优的执行路径。如果基数估计不准确,可能会导致性能问题。

kiwixing的博客 1408

Oracle 11gR2 新技术 Cardinality Feedback

有很多地方可以设置定时任务,比如:Windows的计划任务,Linux下的crontab,各种开发工具里的timer组件。SQL Server也有它的定时任务组件 SQL Server Agent,基于它可以方便的部署各种数据库相关的作业(job)。 一、作业历史记录 作业的历史记录按时间采用FIFO原则,当累积的作业历史记录达到上限时,就会删除最老的记录。 1. 作业历史记录数配置 所有作业总计记录条数默认为1000,最多为999999条。单个作业总计记录条数默认为100,最多为99999..

Hehuyi_In的博客 3153

oracle执行计划中的基数,oracle执行计划基数(cardinality)计算方式

num_rows: dba_tables.num_rowsnum_nulls: dba_tab_cols.num_nullsnum_distinct:dba_tab_cols.num_distinctCard:cardinality基数oracle执行计划基数(cardinality)计算方式1.单列无直方图计算方式Card=(1/num_distinct)*(num_rows-num_nulls...

weixin_32432759的博客 1074

Cardinality基数 Selectivity选择性 Density 密度

------Cardinality用同一个词,但是意义不同的, 和Selectivity对应的是num_distinct=num_rows/density 和density对应的是预估SQL返回行数 retrived_rows=num_rows/num_distinct。 Oracle在文档中,有时用基数来指一个操作返回的记录行数,有时也将基数指不重复的值的数量,因此基数与选择性在《SQL优化核心思想》中也有如下解释: 这个列基数用来考虑建index的 1、Cardinalit...

jnrjian的博客 1564

【DB笔试面试646】在Oracle中,什么是基数(Cardinality)和可选择率(Selectivity)?...

♣题目部分在Oracle中,什么是基数(Cardinality)和可选择率(Selectivity)? ♣答案部分基数(Cardinality)是Oracle预估...

小麦苗DBA宝典 1676

【Oracle】执行计划详解

定义 执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述。 组成 目标SQL的正文、sql_id和执行计划对应的plan_hash_value 执行计划主体,主要有内部执行步骤、执行顺序、谓词信息、列信息、Cardinality、Cost等 执行计划的额外补充信息,是否动态采用(dynamic sampling)、是否Cardinality Feedback、是否SQL Profile 模块解读 主体Header ID:序号 Operation: 当前操作的内容

As before 如初 8327

oracle cardinality对于执行计划的影响

1,SQL> create table t1(a int,b int);表已创建。SQL> create table t2(a int,b int);表已创建。SQL> insert int...

611
上一篇: 搞清以下九个先后顺序,做事不费力
下一篇: Oracle 执行计划(3)-两表连接基数
海鲨数据库架构师:曾凡坤.姒
海鲨数据库架构师:曾凡坤.姒 领域专家: 数据库技术领域 领域专家: 数据库技术领域
博客等级 码龄24年 1432粉丝 381原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值