Wednesday, 15 September 2010

sql - Self Join is making my task run slow in Oracle 11g -



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