Files
notes/histograms/histogram_03.txt
2026-03-12 22:01:38 +01:00

121 lines
3.6 KiB
Plaintext

create pluggable database NEREUS admin user PDB$OWNER identified by secret;
alter pluggable database NEREUS open;
alter pluggable database NEREUS save state;
alter session set container=NEREUS;
show pdbs
show con_name
grant sysdba to adm identified by secret;
alias NEREUS='rlwrap sqlplus adm/secret@bakura/NEREUS as sysdba'
create tablespace USERS datafile size 32M autoextend ON next 32M;
alter database default tablespace USERS;
create user HR identified by secret
quota unlimited on USERS;
grant CONNECT,RESOURCE to HR;
grant CREATE VIEW to HR;
wget https://raw.githubusercontent.com/oracle-samples/db-sample-schemas/main/human_resources/hr_cre.sql
wget https://raw.githubusercontent.com/oracle-samples/db-sample-schemas/main/human_resources/hr_popul.sql
connect HR/secret@bakura/NEREUS
spool install.txt
@hr_cre.sql
@hr_popul.sql
alter user HR no authentication;
select /*+ GATHER_PLAN_STATISTICS */
emp.FIRST_NAME
, emp.LAST_NAME
, dept.DEPARTMENT_NAME
from
HR.EMPLOYEES emp,
HR.DEPARTMENTS dept
where
emp.DEPARTMENT_ID = dept.DEPARTMENT_ID
order by
FIRST_NAME,
LAST_NAME
/
select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST +PEEKED_BINDS +PARALLEL +PARTITION +COST +BYTES'));
exec dbms_stats.delete_table_stats('HR','EMPLOYEES');
exec dbms_stats.delete_table_stats('HR','DEPARTMENTS');
alter system flush shared_pool;
exec dbms_stats.gather_table_stats('HR','EMPLOYEES', method_opt=>'for all columns size SKEWONLY');
exec dbms_stats.gather_table_stats('HR','DEPARTMENTS', method_opt=>'for all columns size SKEWONLY');
exec dbms_stats.gather_table_stats('HR','EMPLOYEES', method_opt=>'for all columns size 254');
exec dbms_stats.gather_table_stats('HR','DEPARTMENTS', method_opt=>'for all columns size 254');
select column_name,num_distinct,density,num_nulls,num_buckets,sample_size,histogram
from dba_tab_col_statistics
where owner='HR' and table_name='EMPLOYEES' and column_name='DEPARTMENT_ID';
select endpoint_value as column_value,
endpoint_number as cummulative_frequency,
endpoint_number - lag(endpoint_number,1,0) over (order by endpoint_number) as frequency
from dba_tab_histograms
where owner='HR' and table_name='EMPLOYEES' and column_name='DEPARTMENT_ID';
select column_name,num_distinct,density,num_nulls,num_buckets,sample_size,histogram
from dba_tab_col_statistics
where owner='HR' and table_name='DEPARTMENTS' and column_name='DEPARTMENT_ID';
select endpoint_value as column_value,
endpoint_number as cummulative_frequency,
endpoint_number - lag(endpoint_number,1,0) over (order by endpoint_number) as frequency
from dba_tab_histograms
where owner='HR' and table_name='DEPARTMENTS' and column_name='DEPARTMENT_ID';
break on report skip 1
compute sum of product on report
column product format 999,999,999
with f1 as (
select
endpoint_value value,
endpoint_number - lag(endpoint_number,1,0) over(order by endpoint_number) frequency
from
dba_tab_histograms
where
owner='HR'
and table_name = 'EMPLOYEES'
and column_name = 'DEPARTMENT_ID'
order by
endpoint_value
),
f2 as (
select
endpoint_value value,
endpoint_number - lag(endpoint_number,1,0) over(order by endpoint_number) frequency
from
dba_tab_histograms
where
owner='HR'
and table_name = 'DEPARTMENTS'
and column_name = 'DEPARTMENT_ID'
order by
endpoint_value
)
select
f1.value, f1.frequency, f2.frequency, f1.frequency * f2.frequency product
from
f1, f2
where
f2.value = f1.value
;