turgar: Minus Statment verbessern

Hallo,

ich habe folgendes Problem:
Vor mir steht ein Oracle 10 Statement, das mehrere mittels "Minus" verbundene selects besitzt.

Der prinzipielle Aufbau ist dabei wie folgt:

  
select identifier  
from test  
where identifier like 'XY%'  
and status = 'IO'  
  
minus  
  
select identifier  
from test  
where identifier like 'XY%'  
and status = 'NIO'  
  
minus  
...  

So folgen mehrere Minus-Blöcke hintereinander.
Da sich alle aber immer auf die gleiche Tabelle beziehen, würde mich interessieren ob es einen schnelleren Weg gibt um an's Ziel zu kommen.
Nebenbei sei noch bemerkt:
Das Ergebnis meines Statements ist korrekt, allerdings würde ich es gerne schneller erhalten.

Danke an alle Helfenden.

  1. Hi,

    Der prinzipielle Aufbau ist dabei wie folgt:

    das LIKE '...%' ist vermutlich ein Zeitfresser, hier kannst Du Dir mal den Ablaufplan ansehen.

    [...] where [...] status = 'IO'
    minus
    [...] where [...] status = 'NIO'

      
    Dieses Statement wird immer das selbe liefern wie der erste Teil, also ohne die MINUS-Statements. Mache bitte deutlicher, wo die Unterschiede liegen.  
      
    
    > Das Ergebnis meines Statements ist korrekt, allerdings würde ich es gerne schneller erhalten.  
      
    Betrachte insbesondere den Ablaufplan des Statements.  
      
    Cheatah  
    
    -- 
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|  
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html  
    X-Will-Answer-Email: No  
    X-Please-Search-Archive-First: Absolutely Yes
    
    1. Hier noch mal die genauere Struktur:

        
      create view cleaned as  
        
        
      select identifier  
      from test  
      where identifier like 'XY%'  
      and status = 'IO'  
      and action != 'X'  
      and substr(identifier, 3, 12) in (select col from cesTable where region in('CHD'))  
        
      minus  
        
      select identifier  
      from test  
      where identifier like 'XY%'  
      and status = 'NIO'  
      and action != 'X'  
        
      minus  
        
      select identifier  
      from test  
      where identifier like 'XY%'  
      and status = 'NIC'  
      and action != 'X'  
        
      minus  
        
      select identifier  
      from test  
      where identifier like 'XY%'  
      and status = 'NIZ'  
      and action != 'X'  
      
      

      Du meinst also, ich kann auf sämtliche minus-Statements verzichten?
      Scheint leider nicht zu klappen;

      1. Hi,

        mir fällt gerade auf, dass ich etwas vorausgesetzt habe, was vielleicht gar nicht stimmt:

        select identifier

        Ist die Spalte identifier UNIQUE? Wenn nicht, war meine Aussage falsch.

        Der Rest Deines Statements sieht so aus, als würde man es auf folgendes reduzieren können:

          
        ...  
        MINUS  
        SELECT identifier  
        FROM test  
        WHERE identifier LIKE 'XY%'  
        AND action != 'X'  
        AND status NOT IN ('NIO', 'NIC', 'NIZ')  
        
        

        Schau Dir wie gesagt unbedingt den Ausführungsplan an. Dort kannst Du identifizieren, wo Du welche Indexe anlegen solltest.

        Du solltest Dir übrigens die gängige Schreibweise von SQL angewöhnen, also alles, was zum SQL-Sprachumfang gehört, groß schreiben.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. mir fällt gerade auf, dass ich etwas vorausgesetzt habe, was vielleicht gar nicht stimmt:

          »» select identifier

          Ist die Spalte identifier UNIQUE? Wenn nicht, war meine Aussage falsch.

          Nein, identifier ist nicht unique;

          Du solltest Dir übrigens die gängige Schreibweise von SQL angewöhnen, also alles, was zum SQL-Sprachumfang gehört, groß schreiben.

          Das macht mein developer von alleine, dafür habe ich aber auch genügend Geld ausgegeben ;)

          1. yo,

            Das macht mein developer von alleine, dafür habe ich aber auch genügend Geld ausgegeben ;)

            aha, und wir bekommen dann hier auch geld von dir, weil es schwieriger ist, nicht gut formatierten Code zu lesen ?

            Ilja

  2. yo,

    verbessern läßt sich wahrscheinlich sehr viel. wenig sinn macht es, uns nur die abfrage zu geben, ohne dein daten-design zu kennen und was du fachlich abfragen willst, am besten mit beispieldaten.

    was die performance betrifft, so sollte man immer erst dann tunen, wenn man auch bedarf hat. stichwörter für dich wären zusammengesetzte indexe und auch funktionale indexe.

    also mehr infos, dann kann dir auch besser geholfen werden.

    Ilja