Beim Einfügen von Daten stellte ich fest, dass ich bei meiner Arbeit an Office-Systemen nie über die Datenbankleistung nachgedacht hatte. Da es sich um eine kleine Datenmenge handelte, waren Zeitaufwand und Effizienz nicht offensichtlich. Aber wenn die Datenmenge sehr groß ist, so groß, dass 10.000 Einfügungen pro Sekunde erforderlich sind, müssen Sie Ihre SQL-Anweisungen berücksichtigen. Beim Einfügen von 100 Daten können folgende Dateneinfügungsmethoden in Betracht gezogen werden: 1: 100-malige For-Schleife, Daten immer wieder einfügen. Einmal verbinden und 100-mal einfügen, was am zeitaufwändigsten ist und die meisten IO- und Verbindungsvorgänge verbraucht. 2: Kombinieren Sie 100 Dateneinfügeanweisungen zu einer SQL-Anweisung, stellen Sie dann einmal eine Verbindung her und fügen Sie die Daten ein. Diese Methode ist zeitaufwändiger als die erste. 3: Verwenden Sie Transaktionen, fügen Sie 100 Mal ein und bestätigen Sie die letzte Transaktion. Diese Methode ist schneller als die zweite Methode. 4: Verwenden Sie die Insert-Anweisung selbst, um mehrere Daten einzufügen; Wenn die oben genannten Methoden auf eine kleine Datenmenge angewendet werden, gibt es fast keinen Unterschied und wir können ihn überhaupt nicht spüren. Wenn die Datenmenge jedoch etwas größer ist, beispielsweise 10.000 Datenelemente auf einmal. Die Geschwindigkeit und Effizienz des Einführens kommen zum Vorschein; Dies ist die MySQL-Instanzklasse; diese Instanz stellt MySQL-Verbindungen und datenbankbezogene Operationen bereit öffentliche Klasse MySqlInstance { //Verbindungszeichenfolge private statische Zeichenfolge mySqlConnectionStr = "Server = localhost; Datenbank = Test; Uid = root; Pwd = Passwort.1;"; private statische MySqlConnection _mysqlConnect; private statische MySqlConnection mysqlConnect { erhalten { wenn (null == _mysqlConnect) { _mysqlConnect = neue MySqlConnection(mySqlConnectionStr); } gibt _mysqlConnect zurück; } } privater statischer MySqlCommand _mysqlCommand; privater statischer MySqlCommand mysqlCommand { erhalten { wenn (null == _mysqlCommand) { _mysqlCommand = mysqlConnect.CreateCommand(); } gibt _mysqlCommand zurück; } } //Öffne die Verbindung public static void OpenConnect() { mysqlConnect.Öffnen(); } //Verbindung schließen public static void CloseConnect() { mysqlConnect.Close(); } öffentliche statische MySqlConnection-Verbindung { erhalten { gibt mysqlConnect zurück; } } //Daten mit Anti-Injection-Methode einfügen //Verwenden Sie zum Einfügen die Transaktion 10000 und bestätigen Sie die Transaktion einmal am Ende public static int InsertData(string Command, List<MySqlParameter> Params) { //Programmzeitüberwachung Stoppuhr sw = new Stopwatch(); //Programmzeitpunkt startssw.Start(); Öffnen SieConnect(); //Transaktion starten MySqlTransaction trans = mysqlConnect.BeginTransaction(); mysqlCommand.CommandText = Befehl; mysqlCommand.Parameters.AddRange(Params.ToArray()); int-Anzahl = 0; für (int i = 0; i < 10000; i++) { wenn (mysqlCommand.ExecuteNonQuery() > 0) zählen++; } //Transaktions-Commit trans.Commit(); Schließen SieConnect(); mysqlCommand.Parameters.Clear(); //Der Timer stoppt sw.Stop(); Zeitspanne ts2 = sw.Verstrichen; Console.WriteLine(ts2.TotalMilliseconds); Anzahl zurückgeben; } //Die Abfrageergebnisse liegen in MySqlDataReader. Sie können die Verbindung nicht schließen, wenn Sie sie verwenden möchten. public static MySqlDataReader SelectData(string sql) { Stoppuhr sw = neue Stoppuhr(); sw.Start(); // Öffnen SieConnect(); MySqlCommand newcommond = neuer MySqlCommand(sql, mysqlConnect); MySqlDataReader-Daten = newcommond.ExecuteReader(); // Schließen SieConnect(); sw.Stopp(); Zeitspanne ts2 = sw.Verstrichen; Console.WriteLine(ts2.TotalMilliseconds); Daten zurückgeben; } /// <Zusammenfassung> /// Die Abfrage ergibt einen Datensatz/// </summary> /// <param name="sql"></param> /// <Rückgabe></Rückgabe> öffentliches statisches DataSet SelectDataSet (Zeichenfolge SQL) { MySqlCommand newcommond = neuer MySqlCommand(sql, mysqlConnect); MySqlDataAdapter-Adapter = neuer MySqlDataAdapter(); adapter.SelectCommand = neuer Befehl; Datensatz ds = neuer Datensatz(); Adapter.Füllen(ds); Rückgabe ds; } //Unsicheres Einfügen mit Injektion public static int InsertDataSql(string sql) { // Öffnen SieConnect(); mysqlCommand.Befehlstext = sql; : In diesem Fall muss mysql.exe ExecuteNonQuery(); // Schließen SieConnect(); Anzahl zurückgeben; } //Parameter sicher einfügen mit @ //10.000 Mal einfügen, ohne Transaktionen zu verwenden public static int InsertDataNoTran(string Command, List<MySqlParameter> Params) { Stoppuhr sw = neue Stoppuhr(); sw.Start(); Öffnen SieConnect(); mysqlCommand.CommandText = Befehl; mysqlCommand.Parameters.AddRange(Params.ToArray()); int-Anzahl = 0; für (int i = 0; i < 10000; i++) { wenn (mysqlCommand.ExecuteNonQuery() > 0) zählen++; } Schließen SieConnect(); mysqlCommand.Parameters.Clear(); sw.Stopp(); Zeitspanne ts2 = sw.Verstrichen; Console.WriteLine(ts2.TotalMilliseconds); Anzahl zurückgeben; } //Buchstabieren Sie 10.000 Insert-Anweisungen auf einmal und senden Sie sie auf einmal ab. public static void test4() { Stoppuhr sw = neue Stoppuhr(); sw.Start(); MySqlInstance.OpenConnect(); MySqlTransaction tran = MySqlInstance.Connection.BeginTransaction(); Zeichenfolgenbefehl = Zeichenfolge.Leer; für (int i = 0; i < 10000; i++) { Zeichenfolge temp = Zeichenfolge.Format("einfügen in test.testtable(pname,pwd) Wert ('{0}','{1}'); \r\n", "Name" + i, "Passwort." + i); Befehl += Temp; } MySqlInstance.InsertDataSql(Befehl); tran.Commit(); MySqlInstance.CloseConnect(); sw.Stopp(); Zeitspanne ts2 = sw.Verstrichen; Console.WriteLine(ts2.TotalMilliseconds); } } Schließlich wird ein Konsolenprogramm erstellt, um die drei Methoden zu testen, indem die Übermittlung von Transaktionen verwendet wird, Transaktionen nicht verwendet werden und 10.000 Einfügungen zu einer Transaktion verkettet werden, und um die benötigte Zeit auszudrucken. Das Ergebnis ist wie folgt: Man kann Folgendes erkennen: Das Festschreiben von 10.000 Einfügungen mit Transaktionen dauerte nur 4,7 Sekunden, während es ohne Transaktionen 311 Sekunden dauerte und das Zusammenstellen von 10.000 Einfügeanweisungen 7,3 Sekunden dauerte. Die hier benötigte Zeit beträgt 7,3 Sekunden. Theoretisch sollte die Ausführung von Datenbank-SQL der Ausführung von Transaktionen ähneln. Die hier benötigte Zeit wird hauptsächlich für die Zeichenfolgenverkettung verwendet, die auf der Clientseite mehr Zeit in Anspruch nimmt. Fügen Sie den Testprogrammcode ein: System verwenden; mit System.Collections.Generic; mit System.Linq; mit System.Text; verwenden von System.Threading.Tasks; mit MySql.Data; Verwendung von MySql.Web; mit MySql.Data.MySqlClient; mithilfe von System.Diagnostics; mit System.Data; Namespace mysqlDEMO01 { Klassenprogramm { statischer void Main(string[] args) { testInsert(); Console.ReadLine(); } //Verwenden Sie @, um den Anti-Injection-Parameter sicher einzufügen. öffentliche statische void testInsert() { Liste<MySqlParameter> lmp = neue Liste<MySqlParameter>(); lmp.Add(neuer MySqlParameter("@pname", "hello2")); lmp.Add(neuer MySqlParameter("@pwd", "1232")); Zeichenfolgenbefehl = "in test.testtable(pname,pwd) Wert(@pname,@pwd) einfügen); "; MySqlInstance.InsertData(Befehl, lmp); Liste<MySqlParameter> lmp2 = neue Liste<MySqlParameter>(); lmp2.Add(neuer MySqlParameter("@pname", "hello2")); lmp2.Add(neuer MySqlParameter("@pwd", "1232")); MySqlInstance.InsertDataNoTran(Befehl, lmp2); test4(); } } } Zusammenfassen Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Wenn Sie mehr darüber erfahren möchten, schauen Sie sich bitte die folgenden Links an Das könnte Sie auch interessieren:
|
<<: So installieren Sie JDK 13 in einer Linux-Umgebung mithilfe eines komprimierten Pakets
>>: JavaScript+html zur Implementierung der Sliding-Verifizierung auf Front-End-Seiten (2)
1 / Kopieren Sie die Webprojektdateien direkt in ...
Lösung: Setzen Sie den Zielattributwert des Links ...
In diesem Artikel finden Sie das Tutorial zur man...
Ich habe gerade angefangen, Datenbankoperationen ...
Inhaltsverzeichnis 1. Tabellenmethode umbenennen ...
Die Methoden zur Installation von Nginx und mehre...
Inhaltsverzeichnis Kurze Einleitung 1. Überprüfen...
MySQL begrenzt die Nutzung von Paging-Anweisungen...
Nachfragehintergrund Das Team muss Integrationste...
Wirkung der Operation: html <div Klasse="...
Redux ist ein einfacher Statusmanager. Wir werden...
Heutige Webdesigns neigen dazu, sehr große Schrif...
1. MySQL 1.1 MySQL-Installation mysql-5.5.27-winx...
In diesem Blogbeitrag geht es um eine Schwierigke...
Verwenden Sie das RPM-Installationspaket, um MySQ...