[PYTHON] Beschleunigen Sie eine große Anzahl einfacher Abfragen in MySQL

Unabhängig davon, wie leicht die Abfrage ist, wenn beispielsweise zwischen dem Webserver und MySQL eine RTT für 5 ms besteht und 20 Abfragen ausgeführt werden, dauert die RTT allein 100 ms.

Die Technik der Verwendung von Masseneinfügungen (eine Abfrage, die mehrere Zeilen nach VALUES schreibt) beim Einfügen vieler Daten ist allgemein bekannt. Diese Technik kann jedoch in den folgenden Fällen nicht verwendet werden.

Zum Beispiel gab es in einem bestimmten Fall unseres Unternehmens die folgende Szene.

Ich habe mehrere Anweisungen und mehrere Ergebnismengen verwendet, um diese Situationen zu beschleunigen.

Multiple Statements

Es können mehrere Abfragen in einem Schuss gesendet werden (ein Aufruf von Cursor.execute () auf Python-Ebene, ein COM_QUERY-Paket auf Protokollebene), getrennt durch;. Durch Verbinden mehrerer INSERT-Anweisungen mit; können Sie eine große Anzahl von INSERT-Anweisungen und UPDATE-Anweisungen beschleunigen.

RTT kann nicht nur reduziert werden, sondern auch die Anzahl der TCP-Pakete. Es ist daher zu erwarten, dass die Belastung des Teils, der Abfragen auf der MySQL-Serverseite empfängt, verringert wird.

Multiple Result sets

import MySQLdb

con = MySQLdb.connect(host="127.0.0.1", port=3306, user="test", password="test")
cur = con.cursor()

q = """\
select 1;
select 2;
select 3;
select 4;
select 5;
"""

cur.execute(q)

while True:
    print(cur.fetchall())
    if not cur.nextset():
        break

In Pythons mysqlclient stehen beispielsweise standardmäßig mehrere Anweisungen zur Verfügung. (Aus Gründen der Abwärtskompatibilität mit der alten Fork-Bibliothek ...) In der Zwischenzeit ist Go's github.com/go-sql-driver/mysql mysql) muss "multiStatements = true" angeben. Eine weitere Einschränkung ist, dass Platzhalter nicht verfügbar sind, wenn die vorbereitete Anweisung von MySQL verwendet wird (Protokollebene anstelle der Anweisung PREPARE). Sie müssen es selbst maskieren, die SQL-Zeichenfolge zusammenstellen und dann die Abfrage auslösen oder festlegen, dass die vorbereitete Anweisung nicht verwendet wird. Wenn Sie mehrere SELECT-Anweisungen kombinieren möchten, müssen Sie nicht nur mehrere Abfragen auslösen, sondern auch die Ergebnisse erhalten. Verwenden Sie dazu mehrere Ergebnismengen. Wenn mehrere Ergebnismengen zurückgegeben werden, kann Python "Cursor.nextset ()" verwenden, um die nächste Ergebnismenge zu erhalten. Verwenden Sie im Fall von Go Rows.NextResultSet () von database / sql, um mehrere Ergebnissätze auf dieselbe Weise zu empfangen. Ich kann.

Recommended Posts

Beschleunigen Sie eine große Anzahl einfacher Abfragen in MySQL
Verbinde eine große Anzahl von Videos miteinander!
Laden Sie eine große Anzahl von Bildern in Wordpress hoch
Organisieren Sie eine große Anzahl von Dateien in Ordnern
[Python] Generieren Sie zufällig eine große Anzahl englischer Personennamen
Konsolidieren Sie eine große Anzahl von CSV-Dateien in Ordnern mit Python (Daten ohne Header).
Ein Tool zum Verfolgen von Postern mit einer großen Anzahl von Likes auf Instagram [25 Minuten bis 1 Sekunde]
Ein einfaches Beispiel für pivot_table.
Scrapy-Redis wird zum Crawlen einer großen Anzahl von Domänen empfohlen
Lambda + Python kann den Zugriff auf eine große Anzahl von IP-Adresslisten gut einschränken
Das Ausführen einer großen Anzahl von Python3 Executor.submit verbraucht möglicherweise viel Speicher.
Rubyist hat versucht, eine einfache API mit Python + Flasche + MySQL zu erstellen
Implementierung eines einfachen Partikelfilters
TensorFlow Aus einer großen Anzahl von Bildern lernen ... ~ (fast) Lösung ~
Konvertieren Sie eine große Anzahl von PDF-Dateien mit pdfminer in Textdateien
Wie erstelle ich eine große Menge an Testdaten in MySQL? ??
Ich möchte das Problem des Speicherverlusts bei der Ausgabe einer großen Anzahl von Bildern mit Matplotlib lösen
Verwenden Sie shutil, um alle Ordner mit einer kleinen Anzahl von Dateien zu löschen
ETL-Verarbeitung für eine große Anzahl von GTFS-Echtzeitdateien (Python Edition)
Generieren Sie eine Liste mit der Anzahl der Tage im aktuellen Monat.
TensorFlow Aus einer großen Anzahl von Bildern lernen ... (ungelöstes Problem) → 12/18 Gelöst
Erstellen einer einfachen Power-Datei mit Python
Maximale durchschnittliche Anzahl täglicher Besucher (groß)
Einfacher RSS-Reader mit Django
Erstellen Sie eine große Textdatei mit Shellscript
Lassen Sie uns mit PLY 1 eine einfache Sprache erstellen
Erstellen Sie eine einfache Web-App mit Flasche
Erweitern Sie eine beliebige Anzahl von Argumenten mit yasnippet
Pandas: Ein sehr einfaches Beispiel für DataFrame.rolling ()
Ich habe mit Python einen einfachen Blackjack gemacht
Zählen Sie die Anzahl der Zeichen mit Echo
Einzeiler, der unter Linux eine große Anzahl von Testdateien gleichzeitig erstellt
Ich habe eine einfache Mail-Sendeanwendung mit tkinter von Python erstellt
Finden Sie heraus, wie Sie eine Datei mit einer bestimmten Anzahl von Zeilen gleichmäßig teilen können
[AtCoder] Lösen Sie ein Problem von ABC101 ~ 169 mit Python
Richten Sie einen einfachen HTTPS-Server mit Asyncio ein
Konvertieren Sie Daten mit Form (Anzahl der Daten, 1) in (Anzahl der Daten,) mit numpy.
Erstellen Sie mit Flask einen einfachen Punktbildgenerator
Berechnen Sie die Gesamtzahl der Kombinationen mit Python
Starten Sie mit Docker einen einfachen Python-Webserver
Finden Sie die Anzahl der Tage in einem Monat
Löse A ~ D des Yuki-Codierers 247 mit Python
Ich habe eine einfache Brieftasche aus Bitcoin mit Pycoin gemacht
Holen Sie sich eine Liste der IAM-Benutzer mit Boto3
Automatisieren einfacher Aufgaben mit Python Inhaltsverzeichnis
Ablauf beim Erstellen einer virtuellen Umgebung mit Anaconda
Einfache Aufgabenliste, erstellt mit Python + Django
Ich habe mit Numpy eine Grafik mit Zufallszahlen erstellt
Erstellen Sie eine Tabelle mit IPython Notebook
Holen Sie sich mit Python eine große Menge von Starbas Twitter-Daten und probieren Sie die Datenanalyse Teil 1 aus
Ein Skript, das Ränder kombiniert, wenn mehrere Diagramme mit Gnuplot auf Kacheln eingefügt werden
Wie identifiziere ich das Element mit der geringsten Anzahl von Zeichen in einer Python-Liste?
[Shell Art] Nur wenn es ein Vielfaches von 3 ist und eine Zahl mit 3 dumm wird
Verwenden Sie die API, um gemeinsam eine große Anzahl ungelesener E-Mails in Google Mail zum Lesen zu ändern