2009-03-13 8 views
1

Ich habe diese SQL Legendes:den Ausführungsplan einer Abfrage

SELECT 
    * 
FROM 
    Requisicao r 
    join convenio c on c.idconvenio = r.idconvenio 
    join empresa e on e.idempresa = c.idempresa 

Wenn ich es ausführen ich diesen Plan für die Ausführung:

PLAN JOIN (C NATURAL,E INDEX (INTEG_160),R INDEX (INTEG_318)) 

Was bedeutet, dass (jedes Convenio-Index nicht verwendet wurde Tabelle hat seine Indizes)

Ich möchte es ein wenig besser verstehen, damit ich einige Leistungsprobleme verbessern kann, die ich mit diesem System habe.

Danke.

Antwort

3

Was scheint für Sie falsch? Da Sie keine Bedingungen (WHERE-Klausel) haben, liest der Server eine Tabelle natürlich, d. H. Von der allerersten Zeile bis zur letzten Zeile. Unter Berücksichtigung der Selektivität des Index entschied served, dass es besser wäre, aus c zu lesen und Datensätze von e und r zu verbinden.

0

Ich stimme Andrei zu. Wenn convenio.idconvenio eine geringe Selektivität hat, ist der Plan in Ordnung.

Verwandte Themen