2012-04-19 28 views
34

Tôi có một tệp SQL chứa hai bảng với khoảng 600.000 hàng hoàn toàn. Hôm qua, tôi đã cố gắng nhập tệp vào cơ sở dữ liệu MySQL của tôi trên Fedora 16 và mất hơn 2 giờ để nhập tệp. Trên PC Windows của tôi mất 7 phút. Máy Linux và Windows của tôi có cùng phần cứng. Một vài người bạn của tôi đã thử nó, và họ đã có một trải nghiệm tương tự.Tại sao nhập SQL chậm?

Lệnh chúng tôi đang sử dụng là: mysql -u root database_name < sql_file.sql.

Tại sao có sự khác biệt về tốc độ?

+0

Các loại bảng giống nhau (INNODB/MYISAM/...)? –

+0

Vâng, các loại bảng giống nhau: Innodb –

+0

Bạn đã kiểm tra mysqlimport chưa? Xem http://stackoverflow.com/questions/2956407/mysql-console-slow-on-import-of-huge-sql-files – rorycl

Trả lời

65

Đặt cược của tôi là Fedora 16 đang tôn trọng ngữ nghĩa giao dịch/đồng bộ hóa và Windows thì không. Nếu bạn làm toán, 600.000 bản cập nhật trong hai giờ là 5.000 mỗi phút. Đó là cùng một thứ tự độ lớn như tốc độ quay của đĩa.

Bạn có thể thử thêm SET autocommit=0; vào đầu tệp nhập và COMMIT; cho đến cuối. Xem this page để biết thêm thông tin.

+2

Nó tạo ra sự khác biệt rất lớn! Chỉ cần thử lại lần nữa và tổng thời gian cho lần nhập dưới 3 phút. Tanks rất nhiều :) –

+0

Sự khác biệt là thiên văn. Tôi đã chờ 20 phút trên tệp kết xuất 27MB trước khi bắt đầu lại với đề xuất của bạn. Mất ít hơn một phút sau đó. Câu trả lời chính xác! –

+0

Điều này hoạt động tốt. Nếu không, định hình lại tệp đầu vào bằng cách sử dụng chèn hàng loạt cũng sẽ hoạt động. Cảm ơn. –

3

Tại sao bạn không xuất file sql như BULK INSERT lựa chọn và nhập nó, hãy thử các tùy chọn trong khi chụp một bản sao lưu sử dụng mysqldump

--extended-insert: sử dụng báo cáo chèn nhiều hàng

--quick: không làm đệm dữ liệu hàng, tốt nếu bảng lớn

Lưu ý: Đảm bảo bạn nên tăng giá trị max_allowed_packet = 32M trở lên trong tệp my.cnf trước khi tạo tệp .sql.

+0

Cảm ơn câu trả lời của bạn, tôi sẽ kiểm tra. –

+1

@LarsSteen Mẹo của Mahesh Patil có tạo nên sự khác biệt nào không? – Alex

+0

No. Không tạo ra nhiều khác biệt. –