sql - Self Join is making my task run slow in Oracle 11g -
i have table named event_extra , on find duplicates based on conditions i'd written next self-join query, when records more(1million) taking lot of time.
table fields follows
evt_id extra1 extra2 extra3 extra4 extra5 extra6 extra7 extra8 extra9 this table has unique index on evt_id.
self-join query
select cde1.evt_id, cde1.extra1, cde1.extra2, cde1.extra3, cde1.extra4, cde1.extra5, cde1.extra6, cde2.evt_id evt_id2, cde1.extra7, cde1.extra8, cde1.extra9, event_extra cde2 bring together event_extra cde1 on (( cde1.extra4 = cde2.extra4 , cde1.extra7 = cde2.extra7) or (cde1.extra4 = cde2.extra5 , cde1.extra7 = cde2.extra8) or (cde1.extra4 = cde2.extra6 , cde1.extra7 = cde2.extra9) or (cde1.extra5 = cde2.extra4 , cde1.extra8 = cde2.extra7) or (cde1.extra5 = cde2.extra5 , cde1.extra8 = cde2.extra8) or (cde1.extra5 = cde2.extra6 , cde1.extra8 = cde2.extra9) or (cde1.extra6 = cde2.extra4 , cde1.extra9 = cde2.extra7) or (cde1.extra6 = cde2.extra5 , cde1.extra9 = cde2.extra8) or (cde1.extra6 = cde2.extra6 , cde1.extra9 = cde2.extra9)) , ((to_number(cde1.extra3) >= to_number(cde2.extra1) , (to_number(cde1.extra3) <= to_number(cde2.extra2))) or ((to_number(cde1.extra1) >= to_number(cde2.extra2)) , (to_number(cde1.extra1) <= to_number(cde2.extra3))) or ((to_number(cde1.extra2) >= to_number(cde2.extra1)) , (to_number(cde1.extra2) <= to_number(cde2.extra3)))) , cde1.evt_id > cde2.evt_id order cde1.evt_id; is there other approach available performance of above query can improved?
database version: oracle11g
see conditions query bound run slow.also , have used order 1 time again making things worst. can remove order , select output in temporary table , perform operation , selection on table. also, seek placing indexes on columns.
sql oracle11g self-join oracle11gr2 sql-tuning
No comments:
Post a Comment