


Optimierungsmethode der Oracle-Tabellenverbindungsmethode (mit Beispielen)
In diesem Artikel geht es um die Optimierungsmethode der Oracle-Tabellenverbindung (mit Beispielen). Freunde in Not können sich darauf beziehen.
In der Oracle-Datenbank gibt es vier Tabellenverbindungsmethoden zwischen zwei Tabellen: Sortier-Merge-Join, Nested-Loop-Join, Hash-Join und kartesischer Join
1 🎜>
Sort-Merge-Join ist eine Tabellenverbindungsmethode, die den Sortiervorgang (SORT) und den Zusammenführungsvorgang (MERGE) verwendet, um den Verbindungsergebnissatz zu erhalten, wenn zwei Tabellen verbunden sind Wenn die T2-Tabelle beim Herstellen von Tabellenverbindungen eine Sortier-Zusammenführungs-Verbindung verwendet, führt Oracle die folgenden Schritte nacheinander aus: a Greifen Sie mit der im Ziel-SQL angegebenen Prädikatbedingung zu und greifen Sie dann auf die Ergebnisse zu Sortiert nach der Verbindungsspalte der t1-Tabelle, und der sortierte Ergebnissatz wird als s1 aufgezeichnetb Greifen Sie mit der im Ziel-SQL angegebenen Prädikatbedingung auf die t2-Tabelle zu und sortieren Sie dann die Zugriffsergebnisse danach In der Verbindungsspalte der T2-Tabelle wird die sortierte Ergebnismenge als s2 aufgezeichnet Die Vorteile, Nachteile und Anwendung des Sortier-Merge-Verbindungsszenarios: a. Normalerweise ist der Effekt des Hash-Joins besser als der des Sortier-Merge-Joins. Wenn die Zeilenquelle jedoch sortiert wurde, ist keine erneute Sortierung erforderlich Beim Ausführen eines Sortier-Merge-Joins ist die Leistung des Sortier-Merge-Joins besser als der eines Hash-Joins.b >1) RBO-Modus 2) Ungleichwert-Join (>,<,>=,<=)3) Wenn Hash-Join deaktiviert ist (_HASH_JOIN_ENABLED=false)Beispiel
SQL> select * from scott.emp t1,scott.emp t2 where t1.empno > t2.mgr; 89 rows selected. Execution Plan ---------------------------------------------------------- Plan hash value: 3950110903 ---------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ---------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 62 | 4712 | 6 (17)| 00:00:01 | | 1 | MERGE JOIN | | 62 | 4712 | 6 (17)| 00:00:01 | | 2 | SORT JOIN | | 14 | 532 | 2 (0)| 00:00:01 | | 3 | TABLE ACCESS BY INDEX ROWID| EMP | 14 | 532 | 2 (0)| 00:00:01 | | 4 | INDEX FULL SCAN | PK_EMP | 14 | | 1 (0)| 00:00:01 | |* 5 | SORT JOIN | | 14 | 532 | 4 (25)| 00:00:01 | | 6 | TABLE ACCESS FULL | EMP | 14 | 532 | 3 (0)| 00:00:01 | ---------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 5 - access(INTERNAL_FUNCTION("T1"."EMPNO")>INTERNAL_FUNCTION("T2"."MGR")) filter(INTERNAL_FUNCTION("T1"."EMPNO")>INTERNAL_FUNCTION("T2"."MGR")) Statistics ---------------------------------------------------------- 1 recursive calls 0 db block gets 8 consistent gets 0 physical reads 0 redo size 6612 bytes sent via SQL*Net to client 575 bytes received via SQL*Net from client 7 SQL*Net roundtrips to/from client 2 sorts (memory) 0 sorts (disk) 89 rows processed SQL>
Beispiel
SQL> select /*+ gather_plan_statistics use_nl(t1,t2)*/* from scott.emp t1,scott.dept t2 where t1.deptno = t2.deptno; SQL> select * from table(dbms_xplan.display_cursor(null,0,'allstats,last')); PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- SQL_ID dcsf9m1rzzga5, child number 0 ------------------------------------- select /*+ gather_plan_statistics use_nl(t1,t2)*/* from scott.emp t1,scott.dept t2 where t1.deptno = t2.deptno Plan hash value: 4192419542 ------------------------------------------------------------------------------------- | Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | ------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | | 14 |00:00:00.01 | 32 | | 1 | NESTED LOOPS | | 1 | 14 | 14 |00:00:00.01 | 32 | | 2 | TABLE ACCESS FULL| DEPT | 1 | 4 | 4 |00:00:00.01 | 7 | |* 3 | TABLE ACCESS FULL| EMP | 4 | 4 | 14 |00:00:00.01 | 25 | ------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- - filter("T1"."DEPTNO"="T2"."DEPTNO") rows selected. SQL>
Hash-Join gilt nur für CBO und kann nur für Equi-Join-Bedingungen verwendet werden
Hash-Join ist Sehr gut geeignet zum Verbinden kleiner und großer Tabellen, insbesondere wenn die Selektivität der Verknüpfungsspalten in einer kleinen Tabelle sehr gut ist, kann die Ausführungszeit eines Hash-Joins ungefähr als äquivalent mit der Zeit angesehen werden, die für einen vollständigen Tabellenscan von a aufgewendet wird große Tabelle
Haha Bei der Durchführung einer Hash-Verbindung kann die dem Treiberergebnissatz entsprechende Hash-Tabelle vollständig im Speicher (PGA-Arbeitsbereich) untergebracht werden. Zu diesem Zeitpunkt ist die Ausführungseffizienz der Hash-Verbindung sehr hoch
Das Leistungsproblem der Hash-Verbindung kann durch das 10104-Ereignis zur Diagnose gelöst werden. Die entsprechenden Anweisungen lauten wie folgt:
Anzahl der In-Memory-Partitionen (kann sich geändert haben): Hash-Partition
Endgültige Anzahl der Hash-Buckets: Hash-Bucket-Nummer
Gesamtzahl der Zeilen: Die Anzahl der Datensätze Steuern des Ergebnissatzes
Maximale Anzahl von Zeilen in einem Bucket: Die im Hash-Bucket enthaltenen Datensätze mit der größten Anzahl von Datensätzen. Anzahl vonDeaktivierte Bitmap-Filterung: Ob die Bitmap-Filterung aktiviert werden soll
BeispielSQL> select /*+ gather_plan_statistics use_hash(t1,t2)*/* from scott.emp t1,scott.dept t2 where t1.deptno = t2.deptno; SQL> select * from table(dbms_xplan.display_cursor(null,0,'allstats,last')); PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- SQL_ID 0j83q86ara5u2, child number 0 ------------------------------------- select /*+ gather_plan_statistics use_hash(t1,t2)*/* from scott.emp t1,scott.dept t2 where t1.deptno = t2.deptno Plan hash value: 615168685 ---------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | OMem | 1Mem | Used-Mem | ---------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | | 14 |00:00:00.01 | 13 | | | | |* 1 | HASH JOIN | | 1 | 14 | 14 |00:00:00.01 | 13 | 1321K| 1321K| 1070K (0)| | 2 | TABLE ACCESS FULL| DEPT | 1 | 4 | 4 |00:00:00.01 | 6 | | | | | 3 | TABLE ACCESS FULL| EMP | 1 | 14 | 14 |00:00:00.01 | 7 | | | | ---------------------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - access("T1"."DEPTNO"="T2"."DEPTNO") 21 rows selected. SQL>
[Verwandte Empfehlungen:
SQL-Tutorial
]
Das obige ist der detaillierte Inhalt vonOptimierungsmethode der Oracle-Tabellenverbindungsmethode (mit Beispielen). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Um die Oracle -Tablespace -Größe abzufragen, führen Sie die folgenden Schritte aus: Bestimmen Sie den Namen Tablespace, indem Sie die Abfrage ausführen: Wählen Sie Tablespace_Name aus dba_tablespaces. Abfragen Sie die Tablespace -Größe durch Ausführen der Abfrage: Summe (Bytes) als Total_Size, sum (bytes_free) als verfügbare_space, sum

Mit der Verschlüsselung von Oracle View können Sie Daten in der Ansicht verschlüsseln und so die Sicherheit sensibler Informationen verbessern. Die Schritte umfassen: 1) Erstellen des Master -Verschlüsselungsschlüssels (MEK); 2) Erstellen einer verschlüsselten Ansicht, der Ansicht und der Verschlüsselung der Ansicht und der MEK angeben; 3) Benutzern Sie die Benutzer, auf die verschlüsselte Ansicht zuzugreifen. Wie verschlüsselte Ansichten funktionieren: Wenn ein Benutzer nach einer verschlüsselten Ansicht nachgefragt wird, verwendet Oracle MEK, um Daten zu entschlüsseln und sicherzustellen, dass nur autorisierte Benutzer auf lesbare Daten zugreifen können.

Es gibt drei Möglichkeiten, Instanznamen in Oracle anzuzeigen: Verwenden Sie den "SQLPLUS" und "Instance_name aus v $ Instance". Befehle in der Befehlszeile. Verwenden Sie den "show Instance_name;" Befehl in SQL*Plus. Überprüfen Sie die Umgebungsvariablen (Oracle_sid unter Linux) über den Task -Manager des Betriebssystems, den Oracle Enterprise Manager oder über das Betriebssystem.

Deinstallieren Sie die Methode für Oracle -Installationsfehler: Schließen Sie den Oracle -Service, löschen Sie Oracle -Programmdateien und Registrierungsschlüssel, Deinstallieren Sie Oracle -Umgebungsvariablen und starten Sie den Computer neu. Wenn das Deinstall fehlschlägt, können Sie das Oracle Universal Deinstall -Tool manuell deinstallieren.

Die Methode zur Lösung des Oracle Cursor Closeure -Problems umfasst: explizit den Cursor mithilfe der Close -Anweisung schließen. Deklarieren Sie den Cursor in der für Aktualisierungsklausel so, dass er nach Beendigung des Umfangs automatisch schließt. Deklarieren Sie den Cursor in der Verwendung der Verwendung so, dass er automatisch schließt, wenn die zugehörige PL/SQL -Variable geschlossen ist. Verwenden Sie die Ausnahmebehandlung, um sicherzustellen, dass der Cursor in jeder Ausnahmesituation geschlossen ist. Verwenden Sie den Verbindungspool, um den Cursor automatisch zu schließen. Deaktivieren Sie die Automatikübermittlung und Verzögerung des Cursors Schließen.

Oracle Ungültige numerische Fehler können durch Fehlpaarung des Datentyps, numerische Überlauf, Datenkonvertierungsfehler oder Datenbeschäftigung verursacht werden. Zu den Schritten zur Fehlerbehebung gehören das Überprüfen von Datentypen, das Erkennen digitaler Überläufe, das Überprüfen von Datenkonvertierungen, das Überprüfen der Datenbeschädigung und das Erforschen anderer möglicher Lösungen wie das Konfigurieren des Parameters nls_numeric_characters und das Aktivieren der Datenüberprüfungs -Protokollierung.

SQL -Anweisungen können basierend auf der Laufzeiteingabe erstellt und ausgeführt werden, indem die dynamische SQL von Oracle verwendet wird. Zu den Schritten gehören: Vorbereitung einer leeren Zeichenfolgenvariable zum Speichern von dynamisch generierten SQL -Anweisungen. Verwenden Sie die sofortige Ausführung oder Vorbereitung, um dynamische SQL -Anweisungen zu kompilieren und auszuführen. Verwenden Sie die Bind -Variable, um die Benutzereingabe oder andere dynamische Werte an dynamische SQL zu übergeben. Verwenden Sie sofortige Ausführung oder führen Sie aus, um dynamische SQL -Anweisungen auszuführen.

In Oracle kann die For -Loop -Schleife Cursors dynamisch erzeugen. Die Schritte sind: 1. Definieren Sie den Cursortyp; 2. Erstellen Sie die Schleife; 3.. Erstellen Sie den Cursor dynamisch; 4. Führen Sie den Cursor aus; 5. Schließen Sie den Cursor. Beispiel: Ein Cursor kann mit dem Zyklus für Kreislauf erstellt werden, um die Namen und Gehälter der Top 10 Mitarbeiter anzuzeigen.
