Heim > Datenbank > MySQL-Tutorial > Wie kann ich große MySQL-Dateien in einer PHP-Umgebung effizient aufteilen und ausführen, ohne den Speicher zu überlasten?

Wie kann ich große MySQL-Dateien in einer PHP-Umgebung effizient aufteilen und ausführen, ohne den Speicher zu überlasten?

DDD
Freigeben: 2024-10-29 10:40:29
Original
829 Leute haben es durchsucht

How can I efficiently split and execute large MySQL files within a PHP environment without overloading memory?

MySQL-Dateien in PHP importieren: Abfragen effektiv aufteilen

Beim Importieren großer MySQL-Dateien in eine PHP-basierte Website ist es entscheidend, Abfragen effizient zu bearbeiten. Ohne Zugriff auf die MySQL-Befehlszeile ist das Aufteilen einer Datei in einzelne Abfragen unerlässlich.

Speicherfreundliche Lösung

Die folgende Funktion teilt eine große SQL-Datei in einzelne Abfragen auf, ohne dass die gesamte Datei dazu erforderlich ist in den Speicher geladen werden:

<code class="php">function SplitSQL($file, $delimiter = ';')
{
    set_time_limit(0);

    if (is_file($file) === true)
    {
        $file = fopen($file, 'r');

        if (is_resource($file) === true)
        {
            $query = array();

            while (feof($file) === false)
            {
                $query[] = fgets($file);

                if (preg_match('~' . preg_quote($delimiter, '~') . '\s*$~iS', end($query)) === 1)
                {
                    $query = trim(implode('', $query));

                    if (mysql_query($query) === false)
                    {
                        echo '<h3>ERROR: ' . $query . '</h3>' . "\n";
                    }

                    else
                    {
                        echo '<h3>SUCCESS: ' . $query . '</h3>' . "\n";
                    }

                    while (ob_get_level() > 0)
                    {
                        ob_end_flush();
                    }

                    flush();
                }

                if (is_string($query) === true)
                {
                    $query = array();
                }
            }

            return fclose($file);
        }
    }

    return false;
}</code>
Nach dem Login kopieren

Diese Funktion behebt häufige Fallstricke wie Feldtrennzeichen und Zeilenumbrüche in Memofeldern.

Daten und Ausgabe testen

Zur Demonstration der Funktion Um die Wirksamkeit zu verbessern, berücksichtigen Sie die folgenden Testdaten:

<code class="sql">CREATE TABLE IF NOT EXISTS "test" (
    "id" INTEGER PRIMARY KEY AUTOINCREMENT,
    "name" TEXT,
    "description" TEXT
);

BEGIN;
    INSERT INTO "test" ("name", "description")
    VALUES (";;;", "something for you mind; body; soul");
COMMIT;

UPDATE "test"
    SET "name" = "; "
    WHERE "id" = 1;</code>
Nach dem Login kopieren

Das Ausführen der SplitSQL-Funktion für diese Daten erzeugt die folgende Ausgabe:

SUCCESS: CREATE TABLE IF NOT EXISTS "test" ( "id" INTEGER PRIMARY KEY AUTOINCREMENT, "name" TEXT, "description" TEXT );
SUCCESS: BEGIN;
SUCCESS: INSERT INTO "test" ("name", "description") VALUES (";;;", "something for you mind; body; soul");
SUCCESS: COMMIT;
SUCCESS: UPDATE "test" SET "name" = "; " WHERE "id" = 1;
Nach dem Login kopieren

Dies zeigt die Zuverlässigkeit der Funktion bei der genauen Aufteilung von Abfragen.

Das obige ist der detaillierte Inhalt vonWie kann ich große MySQL-Dateien in einer PHP-Umgebung effizient aufteilen und ausführen, ohne den Speicher zu überlasten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage