2026-03-12 20:23:15
This commit is contained in:
86
mhouri/CurSelCubeHybridNonPop.sql
Normal file
86
mhouri/CurSelCubeHybridNonPop.sql
Normal file
@@ -0,0 +1,86 @@
|
||||
--************************************************************************
|
||||
-- Name : CurSelCubeHybridNonPop
|
||||
-- Date : October 2017
|
||||
-- Author : Mohamed Houri
|
||||
-- Purpose: gives the selectivity low and high value range of a Hybrid
|
||||
-- non-popular histogram bind variable having an endpoint number
|
||||
-- when this bind variable is used in a bind aware cursor
|
||||
--***********************************************************************
|
||||
var num_rows number
|
||||
var new_density number
|
||||
|
||||
begin
|
||||
select num_rows into :num_rows from all_tables where table_name = upper ('&table_name');
|
||||
end;
|
||||
/
|
||||
|
||||
begin
|
||||
SELECT
|
||||
trunc(((BktCnt-PopBktCnt)/BktCnt)/(NDV-PopValCnt),10)
|
||||
into :new_density
|
||||
FROM
|
||||
(SELECT
|
||||
COUNT(1) PopValCnt,
|
||||
SUM(endpoint_repeat_count) PopBktCnt,
|
||||
ndv,
|
||||
BktCnt,
|
||||
pop_bucketSize
|
||||
FROM
|
||||
(SELECT
|
||||
(sample_size - num_nulls) BktCnt,
|
||||
num_distinct ndv,
|
||||
num_buckets,
|
||||
density OldDensity,
|
||||
(sample_size-num_nulls)/num_buckets pop_bucketSize
|
||||
FROM user_tab_col_statistics
|
||||
WHERE
|
||||
table_name = upper ('&table_name')
|
||||
AND column_name = upper ('&column_name')
|
||||
),
|
||||
user_histograms
|
||||
WHERE table_name = upper ('&table_name')
|
||||
AND column_name = upper ('&column_name')
|
||||
AND endpoint_repeat_count> pop_bucketSize
|
||||
GROUP BY ndv,
|
||||
BktCnt,
|
||||
pop_bucketSize
|
||||
);
|
||||
end;
|
||||
/
|
||||
|
||||
col bind format a10
|
||||
select
|
||||
bind
|
||||
,round((sel_of_bind - offset),6) low
|
||||
,round((sel_of_bind + offset),6) high
|
||||
from
|
||||
(select
|
||||
bind
|
||||
,value_count/:num_rows sel_of_bind
|
||||
,0.1*(value_count/:num_rows) offset
|
||||
from
|
||||
(select
|
||||
endpoint_actual_value bind
|
||||
,(:num_rows*greatest(:new_density,endpoint_repeat_count/sample_size)) value_count
|
||||
from
|
||||
(select
|
||||
sample_size
|
||||
,endpoint_actual_value
|
||||
,endpoint_repeat_count
|
||||
from (select
|
||||
ucs.sample_size
|
||||
,uth.endpoint_actual_value
|
||||
,uth.endpoint_repeat_count
|
||||
from
|
||||
user_tab_histograms uth
|
||||
,user_tab_col_statistics ucs
|
||||
where
|
||||
uth.table_name = ucs.table_name
|
||||
and uth.column_name = ucs.column_name
|
||||
and uth.table_name = upper ('&table_name')
|
||||
and uth.column_name = upper ('&column_name')
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
where bind = &bind;
|
||||
Reference in New Issue
Block a user