2016-03-31 6 views
1

Ich habe die folgende Abfrage:Was ist zu beachten, bevor ein Index erstellt wird?

SELECT OEH.HEADER_ID, OEH.ORDER_NUMBER 
       ,oel.line_number 
       ,oel.pricing_quantity_uom as UOM 
       ,oel.attribute1 as customer_length 
       ,oel.attribute6 as theoretical_weight 
FROM OE_ORDER_HEADERS_ALL OEH JOIN 
    OE_ORDER_LINES_ALL OEL 
    ON OEH.ORG_ID = OEL.ORG_ID AND 
     OEH.HEADER_ID = OEL.HEADER_ID 
WHERE OEL.LINK_TO_LINE_ID IS NULL; 

I Nested Loops bin vor und will diese Abfrage zu stimmen, auf welchen Spalten Wir brauchen einen Index zu erstellen?

+0

Zeigen Sie den Ausführungsplan, Tabellenstrukturen und aktuelle Indizes in Ihrer Frage würde helfen. Warum brauchen Sie überhaupt einen Index? –

+0

@AlexPoole das sind Oracle OM-Tabellen, ich will nur, welche Spalten ich für Indizes berücksichtigen muss, ich habe eine sehr lange Abfrage, das wird nicht so gut sein, hier zu posten. Ich möchte nur eine Idee, welche Spalten für Indizes berücksichtigt werden müssen. –

Antwort

1

Eine praktische Regel besteht darin, die in den Spalten JOIN s: OE_ORDER_HEADERS_ALL(ORG_ID, HEADER_ID) und OE_ORDER_LINES_ALL(ORG_ID, HEADER_ID) verwendeten Spalten zu indizieren.

In der Tat wird Oracle wahrscheinlich nur eine davon für die JOIN verwenden, aber es wird die bessere wählen.

+0

Muss ich die Spalten einschließen, die in select-Klausel sind? –

+1

Das kann die Abfrage geringfügig schneller machen. Da Sie aber wahrscheinlich sowieso die gesamte Tabelle lesen, wird die Tabelle in den Seitencache geladen und macht (im Allgemeinen) keinen großen Unterschied. –