国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Inhaltsverzeichnis
1. Beschreibung
2. Einführung in das Experiment
Sehen Sie sich das allgemeine Protokoll an
四、存儲過程
Heim Java javaLernprogramm So implementieren Sie JDBC-Batch-Insert in Java

So implementieren Sie JDBC-Batch-Insert in Java

May 18, 2023 am 10:02 AM
java jdbc

    1. Beschreibung

    In JDBC kann die Methode ?executeBatch“ mehrere DML-Anweisungen stapelweise ausführen, und die Effizienz ist viel h?her als die einzelne Ausführung von ?executeUpdate“. Wie implementiert man die Batch-Ausführung in MySQL und Oracle? Dieser Artikel stellt Ihnen das Prinzip dahinter vor.

    2. Einführung in das Experiment

    Dieses Experiment wird in den folgenden drei Schritten durchgeführt:a Zeichnen Sie den Zeitaufwand für die Stapelausführung und die Einzelausführung von JDBC auf und Einzelausführung von JDBC in Oracle

    c Zeichnen Sie die zeitaufw?ndige Ausführung von Oracle Plsql und Einzelausführung auf

    Die relevanten Java- und Datenbankversionen sind wie folgt: Java17, Mysql8, Oracle11G

    Erstellen eine Tabelle in MySQL bzw. Oracle

    create table t (  -- mysql中創(chuàng)建表的語句
        id    int,
        name1 varchar(100),
        name2 varchar(100),
        name3 varchar(100),
        name4 varchar(100)
    );
    create table t (  -- oracle中創(chuàng)建表的語句
        id    number,
        name1 varchar2(100),
        name2 varchar2(100),
        name3 varchar2(100),
        name4 varchar2(100)
    );

    Vor dem Experiment müssen Sie die Prüfung der Datenbank aktivieren

    Ein paar Punkte sind im Code zu beachten:

    MySQL-URL muss hinzugefügt werden useServerPrepStmts= true&rewriteBatchedStatements=true Parameter.

    batchCnt stellt die Anzahl der in jedem Stapel ausgeführten SQL-Anweisungen dar, und 0 steht für eine einzelne Ausführung.

    Erster MySQL-Test

    set global general_log = 1;

    Geben Sie verschiedene BatchCnt-Werte ein, um die Ausführungszeit anzuzeigen
    • batchCnt=50 Gesamtzahl der Elemente: 10000, Einfügung pro Stapel: 50, Gesamtzeit: 4369 Millisekunden

      batchCnt= 100 Gesamtzahl der Elemente: 10000, jeder Einfügungsstapel: 100, Gesamtzeitverbrauch: 2598 Millisekunden
    • batchCnt=200 Gesamtzahl der Elemente: 10000, jeder Einfügungsstapel: 200, Gesamtzeitverbrauch: 2211 Millisekunden
    • batchCnt=1000 Gesamt Anzahl der Elemente: 10000, jeder Stapel von Einfügungen: 1000, Gesamtzeitaufwand: 2099 Millisekunden

      batchCnt=10000 Gesamtzahl der Elemente: 10000, jeder Stapeleinfügung: 10000, Gesamtzeitaufwand: 2418 Millisekunden

      batchCnt=0 Gesamtzahl der Elemente : 10000, einzelne Einfügung, insgesamt aufgewendete Zeit: 59620 Millisekunden

    Sehen Sie sich das allgemeine Protokoll an

    batchCnt=5

    batchCnt=0


    Wir k?nnen mehrere Schlussfolgerungen ziehen:



    Die Effizienz der Stapelausführung ist im Vergleich erheblich verbessert zur Einzelausführung.

    Die Stapelausführung von MySQL schreibt SQL tats?chlich neu und führt mehrere Einfügungen zur Ausführung in Einfügung xx Werte (), () ... zusammen.

    Beim ?ndern von batchCnt von 50 auf 100 verkürzt sich die Zeit grunds?tzlich um die H?lfte, aber wenn der Wert erweitert wird, ist die Zeitverkürzung nicht offensichtlich und die Ausführungszeit erh?ht sich sogar.

    • Analysegrund:

    • Nachdem der Client die auszuführende SQL-Anweisung an den Datenbankserver gesendet hat, führt die Datenbank die SQL-Anweisung aus und gibt das Ergebnis an den Client zurück. Gesamtzeitaufwand = Datenbankausführungszeit + Netzwerkübertragungszeit. Die Reduzierung der Anzahl der Roundtrips durch Batch-Ausführung reduziert die Netzwerkübertragungszeit und damit die Gesamtzeit. Wenn jedoch ?batchCnt“ gr??er wird, ist die Verkürzung der Gesamtzeit nicht so offensichtlich, selbst wenn die Netzwerkübertragungszeit nicht mehr der Hauptengpass ist. Insbesondere wenn ?batchCnt=10000“, also alle 10.000 Anweisungen gleichzeitig ausgeführt werden, wird die Zeit l?nger. Dies kann daran liegen, dass das Programm und die Datenbank bei der Vorbereitung dieser Eingabeparameter mehr Zeit ben?tigen. Ich sch?tze).
    • Noch etwas: Kann der Wert von ?batchCnt“ unendlich gro? sein? Angenommen, ich muss 100 Millionen Artikel einfügen. Kann ich dann 100 Millionen Artikel gleichzeitig einfügen? Natürlich nicht, wir berücksichtigen nicht das Platzproblem beim Rückg?ngigmachen. Erstens verfügt Ihr Computer nicht über einen so gro?en Speicher, um alle 100 Millionen SQL-Eingabeparameter auf einmal zu speichern. Zweitens verfügt MySQL auch über einen Parameter max_allowed_packet Die L?nge einer einzelnen Anweisung betr?gt maximal 1 GB. Wenn die Anweisung zu lang ist, wird die Meldung ?Paket für Abfrage ist zu gro? (1.773.901 > 1.599.488)“ gemeldet. Sie k?nnen diesen Wert auf dem Server ?ndern, indem Sie die Variable ?max_allowed_packet“ festlegen. Als n?chstes testen Sie Oracle Gesamtzahl der Elemente: 10000, jeder Einfügungsstapel: 100, Gesamtzeitverbrauch: 1324 Millisekunden
    • batchCnt=200 Gesamtzahl der Elemente: 10000, jeder Einfügungsstapel: 200, Gesamtzeitverbrauch: 856 Millisekunden
    • batchCnt=1000 Gesamtzahl Anzahl der Elemente: 10.000, jeder Stapel von Einfügungen: 1.000, Gesamtzeitaufwand: 785 Millisekunden

      batchCnt=10.000 Gesamtzahl der Elemente: 10.000, jeder Stapeleinfügung: 10.000, Gesamtaufwand: 804 Millisekunden

      batchCnt=0 Gesamtzahl der Elemente: 10000, einzelne Einfügung, insgesamt aufgewendete Zeit: 60830 Millisekunden

    Der Effekt der Ausführung in Oracle ist grunds?tzlich der gleiche wie der in MySQL, und die Effizienz von Batch-Vorg?ngen ist deutlich h?her als die der Einzelausführung. Das Problem besteht darin, dass es in Oracle keine solche Syntax zum Einfügen von xx-Werten(),()... gibt. Wie wird also eine Stapelausführung erreicht?

    Sehen Sie sich die Audit-Ansicht dba_audit_trail an, wenn ?batchCnt=50“ ausgeführt wird

    從審計的結果中可以看到,batchCnt=50的時候,審計記錄只有200條(扣除登入和登出),也就是sql只執(zhí)行了200次。sql_text沒有發(fā)生改寫,仍然是"insert into t values (:1 , :2 , :3 , :4 , :5 )",而且sql_bind只記錄了批量執(zhí)行的最后一個參數(shù),即50的倍數(shù)。根據(jù)awr報告可以看出,實際只執(zhí)行了200次(由于篇幅限制,省略了awr截圖)。那么oracle是怎么做到只執(zhí)行200次但插入1萬條記錄的呢?我們來看看oracle中使用存儲過程的批量插入。

    四、存儲過程

    準備數(shù)據(jù):

    首先將t表清空 truncate table t;

    用java往t表灌10萬數(shù)據(jù) exec("oracle", 100000, 1000);

    創(chuàng)建t1表 create table t1 as select * from t where 1 = 0;

    以下兩個過程的意圖一致,均為將t表中的數(shù)據(jù)導入t1表。nobatch是單次執(zhí)行,usebatch是批量執(zhí)行。

    create or replace procedure nobatch is
    begin
      for x in (select * from t)
      loop
        insert into t1 (id, name1, name2, name3, name4)
        values (x.id, x.name1, x.name2, x.name3, x.name4);
      end loop;
      commit;
    end nobatch;
    /
    create or replace procedure usebatch (p_array_size in pls_integer)
    is
      type array is table of t%rowtype;
      l_data array;
      cursor c is select * from t;
    begin
      open c;
      loop
        fetch c bulk collect into l_data limit p_array_size;
        forall i in 1..l_data.count insert into t1 values l_data(i);
        exit when c%notfound;
      end loop;
      commit;
      close c;
    end usebatch;
    /

    執(zhí)行上述存儲過程

    SQL> exec nobatch; ?
    Elapsed: 00:00:32.92

    SQL> exec usebatch(50);
    Elapsed: 00:00:00.77

    SQL> exec usebatch(100);
    Elapsed: 00:00:00.47

    SQL> exec usebatch(1000);
    Elapsed: 00:00:00.19

    SQL> exec usebatch(100000);
    Elapsed: 00:00:00.26

    存儲過程批量執(zhí)行效率也遠遠高于單條執(zhí)行。查看usebatch(50)執(zhí)行時的審計日志,sql_bind也只記錄了批量執(zhí)行的最后一個參數(shù),即50的倍數(shù)。與使用executeBatch方法在記錄內容方面相同。因此可以推斷,JDBC的executeBatch和存儲過程的批量執(zhí)行都采用了相同的方法

    存儲過程的這個關鍵點就是forall。查閱相關文檔。

    The FORALL statement runs one DML statement multiple times, with different values in the VALUES and WHERE clauses.
    The different values come from existing, populated collections or host arrays. The FORALL statement is usually much faster than an equivalent FOR LOOP statement.
    The FORALL syntax allows us to bind the contents of a collection to a single DML statement, allowing the DML to be run for each row in the collection without requiring a context switch each time.

    翻譯過來就是forall很快,原因就是不需要每次執(zhí)行的時候等待參數(shù)。

    Das obige ist der detaillierte Inhalt vonSo implementieren Sie JDBC-Batch-Insert in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    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

    Undress AI Tool

    Undress AI Tool

    Ausziehbilder kostenlos

    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.

    Clothoff.io

    Clothoff.io

    KI-Kleiderentferner

    Video Face Swap

    Video Face Swap

    Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

    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)

    Ausw?hlen bestimmter Spalten | Leistungsoptimierung Ausw?hlen bestimmter Spalten | Leistungsoptimierung Jun 27, 2025 pm 05:46 PM

    Ausw?hlen vononlyNeededColumnSimProvesPerformanceByRectingResourceuse.1.FetchingAllcolumnSincreasesMemory, Netzwerk und Verarbeitung von

    Was ist der Typ 'Enum' in Java? Was ist der Typ 'Enum' in Java? Jul 02, 2025 am 01:31 AM

    Enums in Java sind spezielle Klassen, die eine feste Anzahl konstanter Werte darstellen. 1. Verwenden Sie die Definition der Enum -Schlüsselwort. 2. Jeder Enumswert ist eine ?ffentliche statische endgültige Instanz des Enumentyps; 3.. Es kann Felder, Konstruktoren und Methoden enthalten, um jeder Konstante Verhalten zu verleihen. 4.. Es kann in Switch-Anweisungen verwendet werden, unterstützt direkten Vergleich und liefert integrierte Methoden wie name (), ordinal (), values ??() und valueOf (); 5. Aufz?hlung kann die Sicherheit, Lesbarkeit und Flexibilit?t des Codes vom Typ verbessern und eignet sich für begrenzte Sammlungsszenarien wie Statuscodes, Farben oder Woche.

    Anwendung der semantischen Struktur mit Artikel, Abschnitt und beiseite in HTML Anwendung der semantischen Struktur mit Artikel, Abschnitt und beiseite in HTML Jul 05, 2025 am 02:03 AM

    Die rationale Verwendung semantischer Tags in HTML kann die Klarheit, Zug?nglichkeit und SEO -Effekte der Seitenstruktur verbessern. 1. für unabh?ngige Inhaltsbl?cke wie Blog-Beitr?ge oder Kommentare muss sie in sich geschlossen werden. 2. für klassifizierungsbezogene Inhalte, die normalerweise Titel enthalten, ist für verschiedene Module der Seite geeignet. 3.. Wird für Hilfsinformationen im Zusammenhang mit dem Hauptinhalt verwendet, nicht jedoch Kern, wie z. B. Seitenleistenempfehlungen oder Autorprofile. In der tats?chlichen Entwicklung sollten Etiketten kombiniert und andere, überm??ige Verschachtelung vermeiden, die Struktur einfach halten und die Rationalit?t der Struktur durch Entwicklerwerkzeuge überprüfen.

    Was ist der JDK? Was ist der JDK? Jun 25, 2025 pm 04:05 PM

    JDK (JavadevelopmentKit) ist eine Softwareentwicklungsumgebung für die Entwicklung von Java -Anwendungen und -Applets. Es enth?lt Tools und Bibliotheken, die zum Kompilieren, Debuggen und Ausführen von Java -Programmen erforderlich sind. Zu den Kernkomponenten geh?ren Java Compiler (Javac), Java Runtime Environment (JRE), Java Interpreter (Java), Debugger (JDB), Tools für Dokumentgenerierung (Javadoc) und Verpackungstools (wie JAR und JMOD). Entwickler brauchen JDK, um Java -Code zu schreiben, zu kompilieren und sich mit Hilfe der IDE zu entwickeln. Ohne JDK k?nnen Java -Anwendungen nicht erstellt oder ge?ndert werden. Sie k?nnen Javac-Version und Java-Version in das Terminal eingeben

    VSCODE -Debugger für Java Setup Guide VSCODE -Debugger für Java Setup Guide Jul 01, 2025 am 12:22 AM

    Die wichtigsten Schritte bei der Konfiguration der Java -Debugging -Umgebung auf VSCODE sind: 1. JDK installieren und überprüfen; 2. Installieren Sie JavaextesionPack und Debuggerforjava Plug-In; 3.. Erstellen und konfigurieren Sie die Datei start.json, angeben Sie MainClass und ProjectName. 4. Richten Sie die richtige Projektstruktur ein, um sicherzustellen, dass der Quellcode -Pfad und die Kompilierungsausgabe korrekt sind. 5. Verwenden Sie Debugging -Techniken wie Watch, F8/F10/F11 -Verknüpfungsschlüssel und -methoden, um mit h?ufigen Problemen wie nicht gefundenen Klassen oder JVM -Bindungsfehlern umzugehen.

    Wie richte ich VS -Code für Java -Entwicklung ein? Wie richte ich VS -Code für Java -Entwicklung ein? Jun 29, 2025 am 12:23 AM

    Um VSCODE für die Java -Entwicklung zu verwenden, müssen Sie die erforderlichen Erweiterungen installieren, den JDK konfigurieren und den Arbeitsbereich einrichten. 1. Installieren Sie JavaextesionPack, einschlie?lich Sprachunterstützung, Debugging -Integration, Erstellen von Tools und Code -Abschlussfunktionen; Optionales Javatestrunner oder Springboot -Erweiterungspaket. 2. Installieren Sie mindestens JDK17 und überprüfen Sie durch Java-Version und Javac-Version; Stellen Sie die Variable der java_home -Umgebungsvariable fest oder wechseln Sie mehrere JDKs in der Statusleiste am unteren Rand des VSCODE. 3. Stellen Sie nach dem ?ffnen des Projektordners sicher, dass die Projektstruktur korrekt ist, und aktivieren Sie das automatische Speichern, passen Sie die Formatierungsregeln an, aktivieren Sie die Codeüberprüfung und konfigurieren Sie die Kompilierungsaufgabe, um die ?ffnung zu optimieren.

    Windows -Suchleiste nicht eingeben Windows -Suchleiste nicht eingeben Jul 02, 2025 am 10:55 AM

    Wenn die Windows -Suchleiste keinen Text eingeben kann, sind gemeinsame L?sungen: 1. Starten Sie den Explorer oder Computer neu, ?ffnen Sie den Task -Manager, um den "Windows Explorer" -Prozess neu zu starten, oder starten Sie das Ger?t direkt neu; 2. Versuchen Sie die Eingabemethode, die englische Eingangsmethode oder die eigene Eingabemethode von Microsoft zu verwenden, um Eingabemethodenkonflikte von Drittanbietern zu beseitigen. 3. Führen Sie das System -Tool des Systemdateis aus und führen Sie den Befehl sfc/scannow in der Eingabeaufforderung aus, um die Systemdateien zu reparieren. 4. Setzen oder bauen Sie den Suchindex wieder auf und bauen Sie ihn durch die "Indexoptionen" im "Bedienfeld" neu auf. Normalerweise beginnen wir zuerst mit einfachen Schritten und die meisten Probleme k?nnen Schritt für Schritt gel?st werden.

    Warum die 'serialisierbare' Schnittstelle verwenden? Warum die 'serialisierbare' Schnittstelle verwenden? Jun 26, 2025 am 01:02 AM

    Implementierung von theSerializableInterfaceinjavaAllowsaclasstobeconvertedInnyTestreamForstorageOrtransmission

    See all articles