MSQL优化基础(height_blanced直方图选择率)

原创 2015年07月07日 16:06:50

NDV>255, 并且数据分布不均衡,则倾向搜集 height_blanced直方图

 

准备数据

drop table t1;
create table t1(n1 number);
declare
min1 number;
max1 number;
begin
	for i in 1..600 loop
		min1 := trunc(dbms_random.value(1,200),0);
		max1 := trunc(dbms_random.value(min1,200),0);
		for j in min1..max1 loop
			insert into t1 values(i);
		end loop;
		commit;
	end loop;
	
	for i in 1..200 loop
		insert into t1 values(40);
		insert into t1 values(80);
	end loop;
end;
/

begin
	for i in 1..800 loop
		insert into t1 values(40);
		insert into t1 values(81);
	end loop;
	commit;
end;
/


begin
	for i in 1..200 loop
		insert into t1 values(39);
	end loop;
end;
/

exec dbms_stats.gather_table_stats(null,'T1',method_opt=>'for all columns size 254');

select num_rows from user_tables where table_name='T1';
  NUM_ROWS
----------
     31696  
select num_distinct,num_nulls, low_value,high_value,HISTOGRAM from user_tab_columns where table_name='T1'
NUM_DISTINCT  NUM_NULLS LOW_VALUE       HIGH_VALUE      HISTOGRAM
------------ ---------- --------------- --------------- ---------------
         536          0 C102            C207            HEIGHT BALANCED


 

 

案例1 : in-range =   var 经常出现的值

选择率 = (val所在的buckets数/bucket总数)*非空率

select endpoint_value,endpoint_number,( endpoint_number - lag(endpoint_number,1) over(order by endpoint_number))  buckets from user_histograms where table_name='T1'
ENDPOINT_VALUE ENDPOINT_NUMBER    BUCKETS
-------------- --------------- ----------
...
 40              27                10
...


select * from t1 where n1 = 40;  --1129 rows selected.
--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |  1248 |  3744 |    14   (8)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| T1   |  1248 |  3744 |    14   (8)| 00:00:01 |
--------------------------------------------------------------------------

选择率 = (val所在的buckets数/bucket总数)*非空率 = 10/254 =.039370079
cardinality = .039370079*31696 =1247.87402  

和rows一样


案例1 : in-range =   var 经常出现的值案例2 : in-range =   var 不出现的值

密度 = (bucket总数 - 所有的常见值的bucket数)/bucket总数/(NDV - 常见值的个数)

选择率 = 密度 * 非空率

select endpoint_value,endpoint_number,( endpoint_number - lag(endpoint_number,1) over(order by endpoint_number))  buckets from user_histograms where table_name='T1'
ENDPOINT_VALUE ENDPOINT_NUMBER    BUCKETS
-------------- --------------- ----------
...
 40              27                10
...

594             250          1
597             252          2
599             253          1
...



select * from t1 where n1=598 (596,595 之类的 出来都是 157 )
--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |       |       |    14 (100)|          |
|*  1 |  TABLE ACCESS FULL| T1   |   157 |   471 |    14   (8)| 00:00:01 |
--------------------------------------------------------------------------

select sum(buckets),count(*) from(
select endpoint_value,endpoint_number,( endpoint_number - lag(endpoint_number,1) over(order by endpoint_number))  buckets from user_histograms where table_name='T1'
) where buckets > 1;
SUM(BUCKETS)   COUNT(*)
------------ ----------
          51         19

密度 =  (254 - 51)/254/(536 - 19) =.001545866
选择率=密度 *1 
cardinality=.001545866*31696=48.9977687   和 rows不一样。
测试环境 10.2 


 

 案例3 : in-range  <

选择率=(Count(Buckets) / Bucket总数)*非空率

select * from t1 where n1<256
--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      | 14475 | 43425 |    14   (8)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| T1   | 14475 | 43425 |    14   (8)| 00:00:01 |
--------------------------------------------------------------------------

select sum(buckets),count(*) from(
select endpoint_value,endpoint_number,( endpoint_number - lag(endpoint_number,1) over(order by endpoint_number))  buckets from user_histograms where table_name='T1'
) where endpoint_value<=256;

SUM(BUCKETS)   COUNT(*)
------------ ----------
         116         96
		 
selectivity= (Count(Buckets) / Bucket总数)*非空率 =116/254 = .456692913
cardinality=.456692913*31696=14475.3386
和rows一样

 

MSQL优化基础(无直方图选择率)

案例一 无直方图  range 内 = 的选择率 选择率=1/NDV×非空率 非空率=(表行数-NUM_NULLS)/表行数 col column_name format a10; col NUM_D...
  • night_person_
  • night_person_
  • 2015年07月01日 15:43
  • 201

MSQL优化基础(frequence直方图选择率)

123123
  • night_person_
  • night_person_
  • 2015年07月03日 09:24
  • 240

MSQL优化基础(Join 选择率)

111
  • night_person_
  • night_person_
  • 2015年07月11日 09:58
  • 249

计算机视觉小实例 No.1 基于直方图优化的图像去雾技术

直方图均衡化直方图均衡化主要用于增强灰度值动态范围偏小的图像的对比度。 什么叫做动态范围,表示图像中所包含的从“最暗”至“最亮”的范围,动态范围越大,所能表现的层次越丰富,所包含的色彩空间也越广。直...
  • linglian0522
  • linglian0522
  • 2017年07月28日 04:25
  • 552

(1)oracle单表选择率(selectivity)——计算执行计划的基数

CBO优化器是基于对当前经过特定测试的数据集中预期的行比率估计来计算基数的。此处的行数之比是一个数值,称为选择率(selectivity)。得到选择率之后,将其与输入行数进行简单相乘既可得到基数。 ...
  • zq9017197
  • zq9017197
  • 2013年01月25日 15:35
  • 3194

msql优化--索引优化

关于数据库优化指标主要为:响应时间,扫描行数,返回行数。对于响应时间,主要体现在服务器级别,服务器性能,网络响应速度等;索引主要为了减少扫描行数;根据limit来限制返回行数。       ...
  • u012466304
  • u012466304
  • 2017年07月14日 18:14
  • 449

MySql参数优化

MySql参数优化 windows系统配置文件在xxx\MySQL\MySQL Server 下 my.ini show global status可以列出mysql服务器运行各种...
  • u012104435
  • u012104435
  • 2016年03月17日 17:36
  • 1088

PostgreSQL查询代价估算(八)

1.1.1        选择率的计算 PostgreSQL通过(等频)直方图、最频值(MCV)和空值率等统计信息来进行选择率的计算。根据操作符的不同,在pg_operator系统表中登记了每个操作...
  • fly2nn
  • fly2nn
  • 2017年03月13日 18:55
  • 178

【图像处理】直方图均衡化

直方图均衡化原理 直方图均衡化的主要思想是将灰度值尽量分布平均,通过计算每个灰度值在图片中出现的概率大小,根据概率的直方图将灰度值进行均衡分配。 PC端代码实现 如下例所示,下例为在VS中实现的图...
  • jaych
  • jaych
  • 2015年10月14日 23:44
  • 1746

图像增强算法实现--直方图的均衡化

(1)算法描述: 直方图均衡化的基本思想是对图像中像素个数多的灰度级进行展宽,而对图像中像素个数少的灰度进行压缩,从而扩展像原取值的动态范围,提高了对比度和灰度色调的变化,使图像更加清晰。彩色直方图的...
  • u013033431
  • u013033431
  • 2016年03月16日 19:33
  • 1056
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MSQL优化基础(height_blanced直方图选择率)
举报原因:
原因补充:

(最多只允许输入30个字)