Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tối ưu hóa Nhập MySQL (Chuyển đổi một Dump SQL dài dòng thành một Speedy One / sử dụng các phần chèn mở rộng)

Tôi đã viết một đoạn script python nhỏ để chuyển đổi điều này:

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');

vào cái này:

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');

Nó không được tốt hay được thử nghiệm tốt, nhưng nó hoạt động trên Sakila kiểm tra kết xuất cơ sở dữ liệu , vì vậy nó có thể xử lý các tệp kết xuất không tầm thường.

Dù sao, đây là tập lệnh:

#!/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(';')

Nó mong đợi đầu vào được piped trên stdin và bản in thành stdout. Nếu bạn đã lưu tập lệnh dưới dạng mysqldump-convert.py , bạn sẽ sử dụng nó như thế này:

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

Hãy cho tôi biết bạn tiếp tục như thế nào!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tạo ứng dụng web từ Scratch bằng Python Flask và MySQL:Phần 2

  2. trong đó 1 =1 câu lệnh

  3. Tạo các truy vấn SQL động cho MySQL DB

  4. Đếm chọn postgresl (*) tốn nhiều thời gian

  5. Mệnh đề MySQL IN:số lượng đối số tối đa