Heim  >  Artikel  >  Datenbank  >  So verwenden Sie gespeicherte MySQL-Prozeduren, um Millionen von Daten zu erstellen

So verwenden Sie gespeicherte MySQL-Prozeduren, um Millionen von Daten zu erstellen

WBOY
WBOYnach vorne
2023-06-03 19:40:011146Durchsuche

1. Vorbereitung

(1) Da gespeicherte Prozeduren verwendet werden, unterstützt MySQL gespeicherte Prozeduren ab Version 5.0, daher muss die MySQL-Version 5.0 oder höher sein. Um die Version von MySQL zu überprüfen, verwenden Sie zur Überprüfung die folgende SQL-Anweisung:

So verwenden Sie gespeicherte MySQL-Prozeduren, um Millionen von Daten zu erstellen

(2) Erstellen Sie zwei Tabellen mit derselben Tabellenstruktur, verwenden Sie jedoch unterschiedliche Speicher-Engines, wie unten gezeigt. Normale Tabellen verwenden MySQL5.5 Version standardmäßig Die INNODB-Speicher-Engine und die Speichertabelle verwenden die MEMORY-Speicher-Engine.

Da MEMORY-Speicher nicht häufig verwendet wird, finden Sie hier eine kurze Einführung in seine Eigenschaften: Die Tabellenstruktur der MEMORY-Engine wird auf der Festplatte erstellt, alle Daten werden im Speicher abgelegt und die Zugriffsgeschwindigkeit ist jedoch hoch Wenn das System neu gestartet wird oder abstürzt, verschwinden die Daten, die Struktur ist noch vorhanden.

# 创建普通表
CREATE TABLE `user_info` (
    `id` INT ( 11 ) NOT NULL AUTO_INCREMENT COMMENT 'ID',
    `name` VARCHAR ( 30 ) NOT NULL COMMENT '用户名',
    `phone` VARCHAR ( 11 ) NOT NULL COMMENT '手机号',
    `status` TINYINT ( 1 ) NULL DEFAULT NULL COMMENT '用户状态:停用0,启动1',
    `create_time` datetime NOT NULL COMMENT '创建时间',
    PRIMARY KEY ( `id` ) USING BTREE 
) ENGINE = INNODB AUTO_INCREMENT = 10001 CHARACTER 
SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户信息表';
 
# 创建内存表
CREATE TABLE `memory_user_info` (
    `id` INT ( 11 ) NOT NULL AUTO_INCREMENT COMMENT 'ID',
    `name` VARCHAR ( 30 ) NOT NULL COMMENT '用户名',
    `phone` VARCHAR ( 11 ) NOT NULL COMMENT '手机号',
    `status` TINYINT ( 1 ) NULL DEFAULT NULL COMMENT '用户状态:停用0,启动1',
    `create_time` datetime NOT NULL COMMENT '创建时间',
    PRIMARY KEY ( `id` ) USING BTREE 
) ENGINE = MEMORY AUTO_INCREMENT = 10001 CHARACTER 
SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户信息内存表';

2. Hauptimplementierungsschritte

(1) Erstellen Sie eine Funktion, die automatisch Daten generiert und beim Einfügen verwendet.

(2) Erstellen Sie eine Datenspeicherprozedur zum Einfügen in die Speichertabelle und rufen Sie die erstellte Datengenerierungsfunktion auf.

(3) Erstellen Sie die Speichertabellendaten und fügen Sie sie in die gewöhnliche gespeicherte Tabellenprozedur ein.

(4) Rufen Sie die gespeicherte Prozedur auf.

(5) Datenanzeige und -überprüfung

3. Erstellen Sie eine Funktion, die automatisch Daten generiert Ihre Funktionen sind wie folgt:

a.concat(): Mehrere Zeichenfolgen zu einer Zeichenfolge verketten.

b.Floor(): Abrunden.

c.substring(string, position, length)So verwenden Sie gespeicherte MySQL-Prozeduren, um Millionen von Daten zu erstellen

Der erste Parameter: string bezieht sich auf die ursprüngliche Zeichenfolge, die abgefangen werden muss.

Der zweite Parameter: Position bezieht sich auf die Position, von der aus die Teilzeichenfolge abgefangen werden soll. Die Positionscodierungssequenznummer des Zeichens beginnt hier bei 1. Wenn Position eine negative Zahl ist, wird die Position von rechts nach links gezählt.

Der dritte Parameter: Länge bezieht sich auf die Länge der Zeichenfolge, die abgefangen werden muss. Wenn nicht geschrieben, werden standardmäßig alle Zeichen vom Anfang der Position bis zum letzten Zeichen abgefangen.

d.RAND(): kann nur zufällige Dezimalzahlen zwischen 0 und 1 generieren.

(2) Erstellen Sie eine Funktion zum zufälligen Generieren von Mobiltelefonnummern

DELIMITER //
DROP FUNCTION
IF
    EXISTS randomNum // CREATE FUNCTION randomNum (
        n INT,
        chars_str VARCHAR ( 10 )) RETURNS VARCHAR ( 255 ) BEGIN
    DECLARE
        return_str VARCHAR ( 255 ) DEFAULT '';
    DECLARE
        i INT DEFAULT 0;
    WHILE
            i < n DO
            
            SET return_str = concat(
                return_str,
            substring( chars_str, FLOOR( 1 + RAND()* 10 ), 1 ));
        
        SET i = i + 1;
        
    END WHILE;
    RETURN return_str;
    
END // 
DELIMITER;

Screenshot der Funktionsausführung:

(3) Erstellen Sie eine zufällig generierte Benutzernamenfunktion

DELIMITER //
DROP FUNCTION
IF
    EXISTS getPhone // CREATE FUNCTION getPhone () RETURNS VARCHAR ( 11 ) BEGIN
    DECLARE
        head CHAR ( 3 );
    DECLARE
        phone VARCHAR ( 11 );
    DECLARE
        bodys VARCHAR ( 65 ) DEFAULT "130 131 132 133 134 135 136 137 138 139 186 187 189 151 157";
    DECLARE
        STARTS INT;
    
    SET STARTS = 1+floor ( rand()* 15 )* 4;
    
    SET head = trim(
    substring( bodys, STARTS, 3 ));
    
    SET phone = trim(
        concat(
            head,
        randomNum ( 8, &#39;0123456789&#39; )));
    RETURN phone;
    
END // 
DELIMITER;

Funktionsausführungs-Screenshot:

So verwenden Sie gespeicherte MySQL-Prozeduren, um Millionen von Daten zu erstellen (4) Benutzerstatusfunktion nach dem Zufallsprinzip generieren

DELIMITER //
DROP FUNCTION
IF
    EXISTS randName // CREATE FUNCTION randName ( n INT ) RETURNS VARCHAR ( 255 ) CHARSET utf8mb4 DETERMINISTIC BEGIN
    DECLARE
        chars_str VARCHAR ( 100 ) DEFAULT &#39;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789&#39;;
    DECLARE
        return_str VARCHAR ( 30 ) DEFAULT &#39;&#39;;
    DECLARE
        i INT DEFAULT 0;
    WHILE
            i < n DO
            
            SET return_str = concat(
                return_str,
            substring( chars_str, FLOOR( 1 + RAND() * 62 ), 1 ));
        
        SET i = i + 1;
        
    END WHILE;
    RETURN return_str;
 
END // 
DELIMITER;

Funktionslauf-Screenshot:

So verwenden Sie gespeicherte MySQL-Prozeduren, um Millionen von Daten zu erstellen (5) Alle benutzerdefinierten Funktionsinformationen in der Datenbank anzeigen

4. Erstellen Sie eine gespeicherte Prozedur

So verwenden Sie gespeicherte MySQL-Prozeduren, um Millionen von Daten zu erstellen (1) Erstellen Sie eine gespeicherte Prozedur zum Einfügen Daten in die Speichertabelle

DELIMITER //
DROP FUNCTION
IF
    EXISTS randStatus // CREATE FUNCTION randStatus ( ) RETURNS TINYINT ( 1 ) BEGIN
    DECLARE
        user_status INT ( 1 ) DEFAULT 0;
    
    SET user_status =
    IF
        ( FLOOR( RAND() * 10 ) <= 4, 1, 0 );
    RETURN user_status;
 
END // 
DELIMITER;

Der Eingabeparameter n gibt an, wie viele Daten in die Speichertabelle eingefügt werden. „memory_user_info“

Screenshot der Operation der gespeicherten Prozedur:So verwenden Sie gespeicherte MySQL-Prozeduren, um Millionen von Daten zu erstellen

(2) Erstellen Sie Speichertabellendaten und fügen Sie gewöhnliche gespeicherte Tabellen ein procedure

DELIMITER //
DROP FUNCTION
IF
    EXISTS randStatus // CREATE FUNCTION randStatus ( ) RETURNS TINYINT ( 1 ) BEGIN
    DECLARE
        user_status INT ( 1 ) DEFAULT 0;
    
    SET user_status =
    IF
        ( FLOOR( RAND() * 10 ) <= 4, 1, 0 );
    RETURN user_status;
 
END // 
DELIMITER;

Dies ist die wichtigste gespeicherte Prozedur. Sie verwendet das zyklische Einfügen und Löschen von Speichertabellen, um Daten in Stapeln zu generieren. Es besteht keine Notwendigkeit, den Standardwert von mysql zu ändern Die Funktion von max_heap_table_size besteht darin, die Größe der vom Benutzer erstellten temporären Speichertabelle zu konfigurieren. Je größer der konfigurierte Wert ist, desto mehr Daten können in der Speichertabelle gespeichert werden.

Screenshot der laufenden gespeicherten Prozedur:

So verwenden Sie gespeicherte MySQL-Prozeduren, um Millionen von Daten zu erstellen

(3) Überprüfen Sie den Status der gespeicherten Prozedur

DELIMITER //
DROP PROCEDURE
IF
    EXISTS add_user_info // CREATE PROCEDURE `add_user_info` ( IN n INT, IN count INT ) BEGIN
    DECLARE
        i INT DEFAULT 1;
    WHILE
            ( i <= n ) DO
            CALL add_memory_user_info ( count );
        INSERT INTO user_info SELECT
        * 
        FROM
            memory_user_info;
        DELETE 
        FROM
            memory_user_info;
        
        SET i = i + 1;
        
    END WHILE;
 
END // 
DELIMITER;

Fuzzy-Abfrageergebnisse:

So verwenden Sie gespeicherte MySQL-Prozeduren, um Millionen von Daten zu erstellen5. Rufen Sie die gespeicherte Prozedur auf Aufruf, also mysql Die Anweisung zum Ausführen der gespeicherten Prozedur ist CALL. CALL akzeptiert den Namen der gespeicherten Prozedur und alle Parameter, die an sie übergeben werden müssen.

Durch Aufrufen der gespeicherten Prozedur add_user_info wird die Speichertabelle Memory_user_info kontinuierlich in eine Schleife eingefügt. Anschließend werden die Daten aus der Speichertabelle abgerufen und in die normale Tabelle user_info eingefügt. Anschließend werden die Speichertabellendaten gelöscht und dieser Zyklus ausgeführt wird bis zum Ende der Schleife fortgesetzt. Führen Sie eine 100-malige Schleife durch und generieren Sie jedes Mal 10.000 Datenelemente und insgesamt eine Million Datenelemente.

-- 查看数据库所有的存储过程
SHOW PROCEDURE STATUS;
-- 模糊查询存储过程
SHOW PROCEDURE STATUS LIKE &#39;add%&#39;;

6. Datenanzeige und -überprüfung

Wenn die normalen Tabellendaten 60.000 Elemente erreichen, dauert es bereits etwa 23 Minuten, bis 1 Million Daten generiert sind. Der zeitaufwändige Punkt liegt hauptsächlich in den vier Funktionen, die zufällig Felddaten generieren. Wenn die Felddaten keine Zufälligkeit erfordern, ist die Verarbeitung viel schneller. So verwenden Sie gespeicherte MySQL-Prozeduren, um Millionen von Daten zu erstellen

Der Datenaufzeichnungseffekt ist wie folgt:

So verwenden Sie gespeicherte MySQL-Prozeduren, um Millionen von Daten zu erstellen

Das obige ist der detaillierte Inhalt vonSo verwenden Sie gespeicherte MySQL-Prozeduren, um Millionen von Daten zu erstellen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen