29.12.2013 Aufrufe

Fehlerbehebung und Optimieren der Datenbankleistung

Fehlerbehebung und Optimieren der Datenbankleistung

Fehlerbehebung und Optimieren der Datenbankleistung

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

v Eine Funktion, die einen Arbeitspuffer verwendet<br />

Wenn Spalten bei<strong>der</strong> Operanden des zugehörigen Joins auf <strong>der</strong>selben Seite <strong>der</strong><br />

Joinbedingung verwendet werden, werden auch Hash-Joins in Betracht gezogen,<br />

können in den meisten Fällen aber nicht gewählt werden.<br />

Wenn kein Hash-Join verwendet werden kann, wird stattdessen ein potenziell<br />

langsamerer Join mit Verschachtelungsschleife verwendet. In diesen Fällen ist die<br />

Kardinalitätsschätzung möglicherweise nicht präzise.<br />

Das folgende Beispiel zeigt einen Join mit einem Ausdruck, <strong>der</strong> als Hash-Join betrachtet<br />

wird:<br />

WHERE UPPER(CUST.LASTNAME) = TRANS.NAME<br />

Das folgende Beispiel zeigt einen Join mit Ausdruck, <strong>der</strong> nicht von einem Hash-<br />

Join profitieren, aber stattdessen einen Join mit Verschachtelungsschleife verwenden<br />

würde:<br />

WHERE RAND() > 0.5<br />

Vermeiden von Ausdrücken für Spalten in lokalen Vergleichselementen:<br />

Statt einen Ausdruck über Spalten in einem lokalen Vergleichselement anzuwenden,<br />

sollten Sie die Umkehrung des Ausdrucks verwenden.<br />

Betrachten Sie die folgenden Beispiele:<br />

AUSDRUCK(C) = ’konstante’<br />

INTEGER(TRANS_DATE)/100 = 200802<br />

Diese Anweisungen können wie folgt umgeschrieben werden:<br />

C = UMKEHRAUSDRUCK(’konstante’)<br />

TRANS_DATE BETWEEN 20080201 AND 20080229<br />

Die Anwendung von Ausdrücken über Spalten verhin<strong>der</strong>t die Verwendung von<br />

Start- <strong>und</strong> Stoppschlüsseln in Indizes, führt zu unpräzisen Selektivitätsschätzungen<br />

<strong>und</strong> erfor<strong>der</strong>t einen zusätzlichen Verarbeitungsaufwand bei <strong>der</strong> Abfrageausführung.<br />

Solche Ausdrücke können auch Abfrageoptimierungen durch Umschreiben verhin<strong>der</strong>n,<br />

die zum Beispiel darin bestünden, dass erkannt wird, wenn Spalten äquivalent<br />

sind, dass Spalten durch Konstanten ersetzt werden o<strong>der</strong> dass ermittelt wird,<br />

dass höchstens eine Zeile zurückgegeben wird. Wenn nachgewiesen wird, dass<br />

höchstens eine Zeile zurückgegeben wird, können normalerweise weitere Optimierungen<br />

angewendet werden. Daher wird <strong>der</strong> Verlust an Optimierungsmöglichkeiten<br />

noch größer. Betrachten Sie die folgende Abfrage:<br />

SELECT LASTNAME, CUST_ID, CUST_CODE FROM CUST<br />

WHERE (CUST_ID * 100) + INT(CUST_CODE) = 123456 ORDER BY 1,2,3<br />

Diese Anweisung kann wie folgt umgeschrieben werden:<br />

SELECT LASTNAME, CUST_ID, CUST_CODE FROM CUST<br />

WHERE CUST_ID = 1234 AND CUST_CODE = ’56’ ORDER BY 1,2,3<br />

Wenn für die Spalte CUST_ID ein eindeutiger Index definiert ist, bietet die umgeschriebene<br />

Version <strong>der</strong> Abfrage dem Abfrageoptimierungsprogramm die Möglichkeit<br />

zu erkennen, dass höchstens eine Zeile zurückgegeben wird. Dadurch wird<br />

eine unnötige Sortieroperation vermieden. Darüber hinaus können die Spalten<br />

CUST_ID <strong>und</strong> CUST_CODE durch die Werte 1234 <strong>und</strong> '56' ersetzt werden, sodass<br />

192 <strong>Fehlerbehebung</strong> <strong>und</strong> <strong>Optimieren</strong> <strong>der</strong> <strong>Datenbankleistung</strong>

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!