41 lines
1.3 KiB
SQL
41 lines
1.3 KiB
SQL
-- Oracle join elimiation demo by Tanel Poder (https://tanelpoder.com)
|
|
|
|
DROP TABLE o;
|
|
DROP TABLE u;
|
|
|
|
CREATE TABLE u AS SELECT * FROM all_users;
|
|
CREATE TABLE o AS SELECT * FROM all_objects WHERE owner IN (SELECT username FROM all_users);
|
|
|
|
ALTER SESSION SET statistics_level = ALL;
|
|
|
|
-- set echo on
|
|
|
|
SELECT COUNT(*) FROM u, o WHERE u.username = o.owner;
|
|
SELECT * FROM TABLE(dbms_xplan.display_cursor(format=>'+OUTLINE -NOTE'));
|
|
|
|
SELECT COUNT(*) FROM u, o WHERE u.username = o.owner AND u.created IS NULL;
|
|
SELECT * FROM TABLE(dbms_xplan.display_cursor(format=>'+OUTLINE -NOTE'));
|
|
|
|
ALTER TABLE u ADD PRIMARY KEY (username);
|
|
ALTER TABLE o ADD CONSTRAINT fk_u FOREIGN KEY (owner) REFERENCES u(username);
|
|
|
|
SELECT COUNT(*) FROM u, o WHERE u.username = o.owner;
|
|
SELECT * FROM TABLE(dbms_xplan.display_cursor(format=>'+OUTLINE -NOTE'));
|
|
|
|
ALTER TABLE o DISABLE CONSTRAINT fk_u;
|
|
|
|
SELECT COUNT(*) FROM u, o WHERE u.username = o.owner;
|
|
SELECT * FROM TABLE(dbms_xplan.display_cursor(format=>'+OUTLINE -NOTE'));
|
|
|
|
ALTER TABLE o ENABLE NOVALIDATE CONSTRAINT fk_u;
|
|
|
|
SELECT COUNT(*) FROM u, o WHERE u.username = o.owner;
|
|
SELECT * FROM TABLE(dbms_xplan.display_cursor(format=>'+OUTLINE -NOTE'));
|
|
|
|
ALTER TABLE o ENABLE VALIDATE CONSTRAINT fk_u;
|
|
|
|
SELECT COUNT(*) FROM u, o WHERE u.username = o.owner;
|
|
SELECT * FROM TABLE(dbms_xplan.display_cursor(format=>'+OUTLINE -NOTE'));
|
|
|
|
-- set echo off
|