Wednesday, November 18, 2015

TUNING FULL TABLE SCANS


CREATE TABLE sh.MY_SALES_ALL AS
SELECT ROWNUM AS ID, X.* FROM sh.SALES X;


CREATE TABLE sh.MY_SALES_2 AS
SELECT * FROM sh.MY_SALES_ALL NOLOGGING;

EXEC DBMS_STATS.GATHER_TABLE_STATS('SH', 'MY_SALES_ALL',
estimate_percent => 100,
method_opt => 'for all columns size 1');

EXEC DBMS_STATS.GATHER_TABLE_STATS('SH', 'MY_SALES_2',
estimate_percent => 100,
method_opt => 'for all columns size 1');

SELECT BLOCKS FROM DBA_TABLES

WHERE TABLE_NAME IN ('MY_SALES_ALL', 'MY_SALES_2');

















DELETE FROM sh.MY_SALES_2 WHERE MOD(ID,100) <> 0;

COMMIT;

EXEC DBMS_STATS.GATHER_TABLE_STATS('SH', 'MY_SALES_2',
estimate_percent => 100,
method_opt => 'for all columns size 1');

SELECT BLOCKS FROM DBA_TABLES
WHERE TABLE_NAME IN ('MY_SALES_ALL', 'MY_SALES_2');

















SET AUTOT TRACE EXP STAT

SELECT * FROM sh.MY_SALES_ALL
WHERE TIME_ID > TO_DATE('20011220', 'YYYYMMDD');































SET AUTOT TRACE EXP STAT
SELECT * FROM sh.MY_SALES_2
WHERE TIME_ID > TO_DATE('20011220', 'YYYYMMDD');


























SET AUTOT OFF

SELECT BLOCKS FROM DBA_TABLES
WHERE TABLE_NAME IN ('MY_SALES_ALL', 'MY_SALES_2');






















Shrink space on the MY_SALES_2 table:

ALTER TABLE sh.MY_SALES_2 ENABLE ROW MOVEMENT;

ALTER TABLE sh.MY_SALES_2 SHRINK SPACE;

EXEC DBMS_STATS.GATHER_TABLE_STATS('SH', 'MY_SALES_2',
estimate_percent => 100,

method_opt => 'for all columns size 1');



















You can see reduced number of physical reads.




No comments:

Post a Comment