-- https://easyteam.fr/limpact-du-facteur-dordonnancement-sur-les-performances-clustering-factor/ create pluggable database NIHILUS admin user NIHILUS$OWNER identified by secret; alter pluggable database NIHILUS open; alter pluggable database NIHILUS save state; alter session set container=NIHILUS; create tablespace USERS datafile size 32M autoextend ON next 32M; alter database default tablespace USERS; create user adm identified by "secret"; grant sysdba to adm; create user usr identified by "secret"; grant CONNECT,RESOURCE to usr; grant alter session to usr; alter user usr quota unlimited on USERS; alias adm_NIHILUS='rlwrap sqlplus adm/"secret"@bakura:1521/NIHILUS as sysdba' alias usr_NIHILUS='rlwrap sqlplus usr/"secret"@ba create table USR.TABLE_LIST_DISPLAY_PATTERNS ( LIST_ID number not null, DISPLAY_PATTERN_ID varchar(1000) not null ); begin for i in 1..100 loop insert into USR.TABLE_LIST_DISPLAY_PATTERNS select i, lpad('x',1000,'x') from dba_objects where rownum < 35 order by 1; end loop; end; / commit; create index USR.LIST_DISPLAY_PATTERNS_IDX on USR.TABLE_LIST_DISPLAY_PATTERNS(LIST_ID); create table USR.TABLE_LIST_DISPLAY_RAND as select * from USR.TABLE_LIST_DISPLAY_PATTERNS order by DBMS_RANDOM.RANDOM; create index USR.LIST_DISPLAY_RAND_IDX on USR.TABLE_LIST_DISPLAY_RAND(LIST_ID); exec dbms_stats.gather_table_stats('USR','TABLE_LIST_DISPLAY_PATTERNS', method_opt=>'for all columns size AUTO'); exec dbms_stats.gather_table_stats('USR','TABLE_LIST_DISPLAY_RAND', method_opt=>'for all columns size AUTO'); SQL> @tab USR.TABLE_LIST_DISPLAY_PATTERNS Show tables matching condition "%USR.TABLE_LIST_DISPLAY_PATTERNS%" (if schema is not specified then current user's tables only are shown)... OWNER TABLE_NAME TYPE NUM_ROWS BLOCKS EMPTY AVGSPC ROWLEN TAB_LAST_ANALYZED DEGREE COMPRESS -------------------- ------------------------------ ---- ------------ ------------- --------- ------ ------ ------------------- ---------------------------------------- -------- USR TABLE_LIST_DISPLAY_PATTERNS TAB 3400 496 0 0 1004 2023-06-25 15:41:27 1 DISABLED 1 row selected. SQL> @ind USR.LIST_DISPLAY_PATTERNS_IDX Display indexes where table or index name matches %USR.LIST_DISPLAY_PATTERNS_IDX%... TABLE_OWNER TABLE_NAME INDEX_NAME POS# COLUMN_NAME DSC -------------------- ------------------------------ ------------------------------ ---- ------------------------------ ---- USR TABLE_LIST_DISPLAY_PATTERNS LIST_DISPLAY_PATTERNS_IDX 1 LIST_ID INDEX_OWNER TABLE_NAME INDEX_NAME IDXTYPE UNIQ STATUS PART TEMP H LFBLKS NDK NUM_ROWS CLUF LAST_ANALYZED DEGREE VISIBILIT -------------------- ------------------------------ ------------------------------ ---------- ---- -------- ---- ---- -- ---------- ------------- ---------- ---------- ------------------- ------ --------- USR TABLE_LIST_DISPLAY_PATTERNS LIST_DISPLAY_PATTERNS_IDX NORMAL NO VALID NO N 2 7 100 3400 551 2023-06-25 15:41:27 1 VISIBLE -- each LIST_ID is stored in how many distinct blocks? alter session set current_schema=USR; select norm.list_id, norm.cnt normanized_blocks , random.cnt randomanized_blocks from (select list_id, count(distinct(dbms_rowid.ROWID_BLOCK_NUMBER(rowid))) cnt from TABLE_LIST_DISPLAY_PATTERNS group by list_id)norm , ( select list_id, count(distinct(dbms_rowid.ROWID_BLOCK_NUMBER(rowid))) cnt from TABLE_LIST_DISPLAY_RAND group by list_id) random where norm.list_id = random.list_id order by list_id; set lines 256 pages 999 var LID NUMBER; execute :LID:=20; select /*+ GATHER_PLAN_STATISTICS */ * from USR.TABLE_LIST_DISPLAY_PATTERNS where LIST_ID=:LID; select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST +PEEKED_BINDS +PARALLEL +PARTITION +COST +BYTES')); ------------------------------------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| A-Rows | A-Time | Buffers | -------------------------------------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | | | 7 (100)| 34 |00:00:00.01 | 14 | | 1 | TABLE ACCESS BY INDEX ROWID BATCHED| TABLE_LIST_DISPLAY_PATTERNS | 1 | 34 | 34136 | 7 (0)| 34 |00:00:00.01 | 14 | |* 2 | INDEX RANGE SCAN | LIST_DISPLAY_PATTERNS_IDX | 1 | 34 | | 1 (0)| 34 |00:00:00.01 | 5 | -------------------------------------------------------------------------------------------------------------------------------------------------- select /*+ GATHER_PLAN_STATISTICS */ * from USR.TABLE_LIST_DISPLAY_RAND where LIST_ID=:LID; select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST +PEEKED_BINDS +PARALLEL +PARTITION +COST +BYTES')); ---------------------------------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| A-Rows | A-Time | Buffers | ---------------------------------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | | | 35 (100)| 34 |00:00:00.01 | 39 | | 1 | TABLE ACCESS BY INDEX ROWID BATCHED| TABLE_LIST_DISPLAY_RAND | 1 | 34 | 34136 | 35 (0)| 34 |00:00:00.01 | 39 | |* 2 | INDEX RANGE SCAN | LIST_DISPLAY_RAND_IDX | 1 | 34 | | 1 (0)| 34 |00:00:00.01 | 5 | ----------------------------------------------------------------------------------------------------------------------------------------------