Heim Datenbank MySQL-Tutorial ORACLE绑定变量BINDPEEKING

ORACLE绑定变量BINDPEEKING

Jun 07, 2016 pm 03:03 PM
oracle 变量 绑定 进入

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入 SQL exec :v := 2; PL/SQL 过程已成功完成。 SQL select count(*) from acs_test_tab where record_type = :v; COUNT(*) ---------- 50000 SQL select * from table(dbms_xplan.display_cursor

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入


    SQL> exec :v := 2;
    PL/SQL 过程已成功完成。
    SQL> select count(*) from acs_test_tab where record_type = :v;
    COUNT(*)
    ----------
    50000
    SQL> select * from table(dbms_xplan.display_cursor(null,null,'advanced'));
    PLAN_TABLE_OUTPUT
    ----------------------------------------------------------------------------------------------------
    SQL_ID3rg5r8sghcvb3, child number 0
    -------------------------------------
    select count(*) from acs_test_tab where record_type = :v
    Plan hash value: 2957754476
    ----------------------------------------------------------------------------------------------------
    | Id  | Operation      | Name   | Rows  | Bytes | Cost (%CPU)| Time   |
    ----------------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT      |    |   |   |   136 (100)|   |
    |   1 |  SORT AGGREGATE       |    | 1 | 4 ||   |
    |*  2 |   INDEX FAST FULL SCAN| ACS_TEST_TAB_RECORD_TYPE_I | 48031 |   187K|   136   (1)| 00:00:02 |
    ----------------------------------------------------------------------------------------------------
    Peeked Binds (identified by position):
    --------------------------------------
    1 - :V (NUMBER): 2  --绑定变量窥探,绑定变量会影响最初硬解析的执行计划
    Predicate Information (identified by operation id):
    ---------------------------------------------------
    2 - filter("RECORD_TYPE"=:V)
    已选择49行。
    使用绑定变量窥测的好处是:可以帮助优化器在第一次硬解析时选择最优的执行计划。但是同时这也是其弊端:在第一次硬解析后,后面发生的所有解析都会使用第一次硬解析生成的执行计划,如果数据的分布是均匀的,问题不大,如果数据分布式倾斜的,那么第一次硬解析生成的执行计划未必是最优的,甚至可能是非常糟糕的。例如:
    SQL> show parameter optimizer_feat
    NAME     TYPE VALUE
    ------------------------------------ ----------- ------------------------------
    optimizer_features_enable     string 11.2.0.3.1
    SQL> alter system flush shared_pool;
    系统已更改。
    SQL> var v number;
    SQL> exec :v := 2;
    PL/SQL 过程已成功完成。
    SQL> select count(*) from acs_test_tab where record_type = :v;
    COUNT(*)
    ----------
    50000
    SQL> select * from table(dbms_xplan.display_cursor);
    PLAN_TABLE_OUTPUT
    ----------------------------------------------------------------------------------------------------
    SQL_ID3rg5r8sghcvb3, child number 0
    -------------------------------------
    select count(*) from acs_test_tab where record_type = :v
    Plan hash value: 2957754476
    ----------------------------------------------------------------------------------------------------
    | Id  | Operation      | Name   | Rows  | Bytes | Cost (%CPU)| Time   |
    ----------------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT      |    |   |   |   136 (100)|   |
    |   1 |  SORT AGGREGATE       |    | 1 | 4 ||   |
    |*  2 |   INDEX FAST FULL SCAN| ACS_TEST_TAB_RECORD_TYPE_I | 48031 |   187K|   136   (1)| 00:00:02 |
    ----------------------------------------------------------------------------------------------------
    Predicate Information (identified by operation id):
    ---------------------------------------------------
    2 - filter("RECORD_TYPE"=:V)
    已选择19行。
    SQL> exec :v := 1
    PL/SQL 过程已成功完成。
    SQL> select count(*) from acs_test_tab where record_type = :v;
    COUNT(*)
    ----------
    1
    SQL> select * from table(dbms_xplan.display_cursor);
    PLAN_TABLE_OUTPUT
    ----------------------------------------------------------------------------------------------------
    SQL_ID3rg5r8sghcvb3, child number 0
    -------------------------------------
    select count(*) from acs_test_tab where record_type = :v
    Plan hash value: 2957754476
    ----------------------------------------------------------------------------------------------------
    | Id  | Operation      | Name   | Rows  | Bytes | Cost (%CPU)| Time   |
    ----------------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT      |    |   |   |   136 (100)|   |
    |   1 |  SORT AGGREGATE       |    | 1 | 4 ||   |
    |*  2 |   INDEX FAST FULL SCAN| ACS_TEST_TAB_RECORD_TYPE_I | 48031 |   187K|   136   (1)| 00:00:02 |
    ----------------------------------------------------------------------------------------------------
    Predicate Information (identified by operation id):
    ---------------------------------------------------
    2 - filter("RECORD_TYPE"=:V)
    已选择19行。
    SQL> select count(*) from acs_test_tab where record_type = 1;
    COUNT(*)
    ----------
    1
    SQL> select * from table(dbms_xplan.display_cursor);
    PLAN_TABLE_OUTPUT
    ----------------------------------------------------------------------------------------------------
    SQL_ID1pxm87f6yd0bp, child number 0
    -------------------------------------
    select count(*) from acs_test_tab where record_type = 1
    Plan hash value: 2956728990
    ------------------------------------------------------------------------------------------------
    | Id  | Operation  | Name       | Rows  | Bytes | Cost (%CPU)| Time     |
    ------------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT  |       |       |       |     3 (100)|       |
    |   1 |  SORT AGGREGATE   |       |     1 |     4 |    |       |
    |*  2 |   INDEX RANGE SCAN| ACS_TEST_TAB_RECORD_TYPE_I |     1 |     4 |     3 (0)| 00:00:01 |
    ------------------------------------------------------------------------------------------------
    Predicate Information (identified by operation id):
    ---------------------------------------------------
    2 - access("RECORD_TYPE"=1)
    已选择19行。
    对于变量v的取值为1的执行计划和采用常量1的执行计划性能差距还是比较大的。
    总结:oracle在9i后引入变量窥测技术,该技术对于数据分布均匀的数据是非常合适的,但是对于分布倾斜的数据或者在OLAP系统中是不建议使用的。

  [1] [2] 

ORACLE绑定变量BINDPEEKING

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So fügen Sie Festplatten in Oracle RAC hinzu und ersetzen Sie So fügen Sie Festplatten in Oracle RAC hinzu und ersetzen Sie Apr 11, 2025 pm 05:39 PM

Oracle RAC -Festplatte Neue und Ersatzvorgänge: Fügen Sie Festplatten hinzu: Fügen Sie neue Festplatten hinzu, erstellen Sie ASM -Disk -Gruppen, fügen Sie Cluster hinzu, verschieben Sie Datendateien. Festplatte ersetzen: Identifizieren Sie die fehlgeschlagene Festplatte, schließen Sie die Festplattengruppe, ersetzen Sie die Festplatte, öffnen Sie die Festplattengruppe, reparieren Sie die fehlgeschlagene Festplatte und verschieben Sie die Datendateien.

Wie man mit Oracle Machtcode umgeht Wie man mit Oracle Machtcode umgeht Apr 11, 2025 pm 07:00 PM

Oracle -verstümmelte Probleme werden normalerweise durch unsachgemäße Einstellungen für den Charaktersatz verursacht. Zu den Lösungen gehören: Überprüfen der Server-, Datenbank- und Client -Zeichensätze. Richten Sie nach Bedarf den Server-, Datenbank- und Client -Zeichensätze ein. Verwenden Sie die Konvertierungsfunktion oder die Funktion dbms_lob.convert_lob, um verstümmelte Daten zu beheben. Geben Sie immer den Zeichensatz an und setzen Sie die NLS -Parameter korrekt ein.

Wie man Orakel wiedergegeben Wie man Orakel wiedergegeben Apr 11, 2025 pm 07:33 PM

Oracle bietet mehrere Deduplication -Abfragemethoden: Das bestimmte Schlüsselwort gibt für jede Spalte einen eindeutigen Wert zurück. Die Gruppe nach Klausel gruppiert die Ergebnisse und gibt für jede Gruppe einen nicht repetitiven Wert zurück. Das eindeutige Schlüsselwort wird verwendet, um einen Index mit nur eindeutigen Zeilen zu erstellen, und das Abfragen des Index wird automatisch dedupliziert. Die Funktion row_number () weist eindeutige Zahlen und filtert Ergebnisse aus, die nur Zeile 1 enthalten. Die Funktion min () oder max () gibt nicht repetitive Werte einer numerischen Spalte zurück. Der Schnittbetreiber gibt die gemeinsamen Werte der beiden Ergebnissätze zurück (keine Duplikate).

So überprüfen Sie die Tabellenraumgröße von Oracle So überprüfen Sie die Tabellenraumgröße von Oracle Apr 11, 2025 pm 08:15 PM

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

So stellen Sie eine Verbindung zu einem Cloud -Server her So stellen Sie eine Verbindung zu einem Cloud -Server her Apr 11, 2025 pm 06:51 PM

Die Schritte zur Verbindung zu einem Cloud -Server über einen Oracle -Client sind wie folgt: Erstellen Sie einen SSH -Schlüssel und kopieren Sie den öffentlichen Schlüssel auf den Cloud -Server. Konfigurieren Sie den Oracle -Client und fügen Sie die Verbindungsinformationen des Cloud -Servers zur Datei tnsnames.ora hinzu. Erstellen Sie eine neue Datenbankverbindung im Oracle -Client, geben Sie den Benutzernamen, das Passwort und den DSN ein. Klicken Sie auf OK und überprüfen Sie, ob die Verbindung erfolgreich ist.

Zusammenfassung der Grundkenntnisse der Oracle -Datenbank Zusammenfassung der Grundkenntnisse der Oracle -Datenbank Apr 11, 2025 pm 06:33 PM

Die Oracle-Datenbank ist ein zuverlässiges, skalierbares und featurereiches relationales Datenbankverwaltungssystem (RDBMS). Die Architektur folgt dem Client-Server-Modell, einschließlich serverseitiger Komponenten (Oracle Net), Instanzen, gemeinsamen Speicherbereiche (SGAs), Hintergrundprozessen und Datenbankdateien, die Daten speichern. Zu den grundlegenden Konzepten gehören Tabellen, Zeilen, Spalten, Primärschlüssel, Fremdschlüssel, Indizes und Cursoren. Die Datenbank ist bekannt für ihre Vorteile wie hohe Verfügbarkeit, Big -Data -Unterstützung, umfangreiche Funktionen, starke Sicherheit und Benutzerfreundlichkeit.

So ändern Sie Oracle -Zeichensatz So ändern Sie Oracle -Zeichensatz Apr 11, 2025 pm 06:57 PM

Um den Oracle -Zeichensatz zu ändern, müssen Sie: die Datenbank sichern; Ändern Sie die Zeichensatzeinstellungen in der init.ora -Datei; Starten Sie die Datenbank neu; Ändern Sie vorhandene Tabellen und Spalten, um den neuen Zeichensatz zu verwenden. Laden Sie die Daten neu; Ändern Sie den Datenbanklink (optional).

So verwenden Sie gespeicherte Verfahren für Oracle So verwenden Sie gespeicherte Verfahren für Oracle Apr 11, 2025 pm 07:03 PM

Eine gespeicherte Prozedur ist eine Reihe von SQL -Anweisungen, die in einer Datenbank gespeichert werden können und wiederholt als separate Einheit bezeichnet werden können. Sie können Parameter (in, out, in Out) akzeptieren und die Vorteile von Code -Wiederverwendung, Sicherheit, Leistung und Modularität bereitstellen. Beispiel: Erstellen Sie eine gespeicherte Prozedur Calculate_sum, um die Summe von zwei Zahlen zu berechnen und sie im Out -Parameter zu speichern.

See all articles