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

MySQLインポートの最適化(Verbose SQLDumpをSpeedyOneに変換/extended-insertsを使用)

    これを変換する小さなPythonスクリプトを作成しました:

    LOCK TABLES `actor` WRITE;
    /*!40000 ALTER TABLE `actor` DISABLE KEYS */;
    INSERT INTO `actor` (`actor_id`, `first_name`, `last_name`, `last_update`) VALUES (1,'PENELOPE','GUINESS','2006-02-15 12:34:33');
    INSERT INTO `actor` (`actor_id`, `first_name`, `last_name`, `last_update`) VALUES (2,'NICK','WAHLBERG','2006-02-15 12:34:33');
    INSERT INTO `actor` (`actor_id`, `first_name`, `last_name`, `last_update`) VALUES (3,'ED','CHASE','2006-02-15 12:34:33');
    

    これに:

    LOCK TABLES `actor` WRITE;
    /*!40000 ALTER TABLE `actor` DISABLE KEYS */;
    INSERT INTO `actor` VALUES(1,'PENELOPE','GUINESS','2006-02-15 12:34:33'),(2,'NICK','WAHLBERG','2006-02-15 12:34:33'),(3,'ED','CHASE','2006-02-15 12:34:33');
    

    あまりきれいではなく、十分にテストされていませんが、Sakila> データベースダンプ をテストします 、重要なダンプファイルを処理できるようにします。

    とにかく、ここにスクリプトがあります:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*- #
    
    import re
    import sys
    
    re_insert = re.compile(r'^insert into `(.*)` \(.*\) values (.*);', re.IGNORECASE)
    
    current_table = ''
    
    for line in sys.stdin:
        if line.startswith('INSERT INTO'):
            m = re_insert.match(line)
            table = m.group(1)
            values = m.group(2)
    
            if table != current_table:
                if current_table != '':
                    sys.stdout.write(";\n\n")
                current_table = table
                sys.stdout.write('INSERT INTO `' + table + '` VALUES ' + values)
            else:
                sys.stdout.write(',' + values)
        else:
            if current_table != '':
                sys.stdout.write(";\n")
                current_table = ''
            sys.stdout.write(line)
    
    if current_table != '':
        sys.stdout.write(';')
    

    stdinにパイプ入力され、stdoutに出力されることを期待しています。スクリプトをmysqldump-convert.pyとして保存した場合 、次のように使用します:

    cat ./sakila-db/sakila-full-dump.sql | python mysqldump-convert.py > test.sql
    

    乗り方を教えてください!




    1. 昨日からのみレコードを選択するにはどうすればよいですか?

    2. csvファイルでSQLテーブルの1列のみを更新する方法

    3. PHPPDOプリペアドステートメント

    4. 構造化クエリ言語–SQL学習の重要性