sql >> データベース >  >> RDS >> Mysql

300,000行のテキストファイルデータを処理してMySQLに挿入するためのより良い方法はありますか?

    あなたのコードから、あなたの「一意の識別子」(少なくともこの挿入の目的のために)は複合(READING_DATE, READING_TIME, READING_ADDRESS)であるように見えます 。

    そのようなUNIQUEを定義する場合 データベースにキーを入力してから、LOAD DATA IGNOREを使用 キーワードはあなたが必要とすることを正確に行うべきです:

    ALTER TABLE tbl_reading
      ADD UNIQUE KEY (READING_DATE, READING_TIME, READING_ADDRESS)
    ;
    
    LOAD DATA INFILE '/path/to/csv'
        IGNORE
        INTO TABLE tbl_reading
        FIELDS
            TERMINATED BY ','
            OPTIONALLY ENCLOSED BY '"'
            ESCAPED BY ''
        LINES
            TERMINATED BY '\r\n'
        (@rec_0, @rec_1, @rec_2, @rec_3, @rec_4, @rec_5, @rec_6, @rec_7, @rec_8)
        SET
            READING_DATE = DATE_FORMAT(STR_TO_DATE(TRIM(@rec_0), '???'), '%Y/%m/%d'),
            READING_TIME = DATE_FORMAT(STR_TO_DATE(TRIM(@rec_1), '???'), '%H:%i:%s'),
            READING_ADDRESS    = TRIM(@rec_2),
            CO2_SET_VALUE      = TRIM(@rec_3),
            CO2_PROCESS_VALUE  = TRIM(@rec_4),
            TEMP_SET_VALUE     = TRIM(@rec_5),
            TEMP_PROCESS_VALUE = TRIM(@rec_6),
            RH_SET_VALUE       = TRIM(@rec_7),
            RH_PROCESS_VALUE   = TRIM(@rec_8)
    ;
    

    (ここで'???' CSVの日付と時刻の形式を表す文字列に置き換えられます。

    実際にはREADING_DATEを保存する必要があることに注意してください およびREADING_TIME 1つのDATETIMEにまとめて またはTIMESTAMP 列:

    ALTER TABLE tbl_reading
      ADD COLUMN READING_DATETIME DATETIME AFTER READING_TIME,
      ADD UNIQUE KEY (READING_DATETIME, READING_ADDRESS)
    ;
    
    UPDATE tbl_reading SET READING_DATETIME = STR_TO_DATE(
      CONCAT(READING_DATE, ' ', READING_TIME),
      '%Y/%m/%d %H:%i:%s'
    );
    
    ALTER TABLE tbl_reading
      DROP COLUMN READING_DATE,
      DROP COLUMN READING_TIME
    ;
    

    その場合、SET LOAD DATAの句 コマンドには代わりに次のものが含まれます:

    READING_DATETIME = STR_TO_DATE(CONCAT(TRIM(@rec_0), ' ', TRIM(@rec_1)), '???')
    


    1. geminstallpgはOSXLionでは機能しません

    2. 年齢を計算するためのMySQLの日付の違い

    3. mysqlGROUP_CONCATが重複しています

    4. ASP.Net / MySQL:コンテンツを複数の言語に翻訳する