LOAD DATA INFILE và INSERT mở rộng đều có những ưu điểm riêng biệt.
LOAD DATA INFILE được thiết kế để tải hàng loạt dữ liệu bảng trong một thao tác duy nhất cùng với chuông và còi để thực hiện các bài hát như:
- Bỏ qua các dòng ban đầu
- Bỏ qua các cột cụ thể
- Chuyển đổi các cột cụ thể
- Đang tải các cột cụ thể
- Xử lý các vấn đề chính trùng lặp
Cần ít chi phí hơn để phân tích cú pháp
Mặt khác, nếu bạn chỉ nhập 100 hàng thay vì 1.000.000 hàng, thì INSERT mở rộng là hợp lý.
Lưu ý rằng mysqldump được thiết kế xung quanh các INSERT mở rộng với mục đích mang thiết kế bảng cùng với dữ liệu khi nó thực hiện việc tiêm hàng trăm hoặc hàng nghìn hàng cho mỗi INSERT. LOAD DATA INFILE luôn tạo ra một kiểu mẫu vật lý giữa lược đồ và dữ liệu.
Từ quan điểm của ứng dụng, LOAD DATA INFILE cũng không nhạy cảm hơn với thay đổi lược đồ so với các INSERT mở rộng.
Người ta có thể qua lại về cái tốt, cái xấu và cái xấu của việc sử dụng LOAD DATA INFILE. Cho dù bạn sử dụng kỹ thuật nào, bạn phải luôn đặt số lượng lớn_insert_buffer_size . Tại sao?
Theo Tài liệu MySQL trên Bulk_insert_buffer_size:
MyISAM sử dụng bộ đệm giống như cây đặc biệt để chèn số lượng lớn nhanh hơn cho CHỌN ... CHỌN, XÁC NHẬN ... GIÁ TRỊ (...), (...), ... và LOAD DATA INFILE khi thêm dữ liệu vào dữ liệu không trống những cái bàn. Biến này giới hạn kích thước của cây bộ đệm theo byte trên mỗi luồng. Đặt nó thành 0 sẽ vô hiệu hóa tối ưu hóa này. Giá trị mặc định là 8MB.
Trong nhiều năm, tôi đã thấy khách hàng sau khi khách hàng không đặt cái này và để nó ở mức 8MB. Sau đó, khi họ quyết định sử dụng LOAD DATA INFILE hoặc nhập mysqldumps, họ có thể cảm thấy có gì đó không đúng. Tôi thường khuyên bạn nên cài đặt này ở mức vừa phải 256M. Trong một số trường hợp, 512M.
Khi bạn có bộ đệm INSERT số lượng lớn đủ lớn, sử dụng một trong hai kỹ thuật sẽ được kết xuất mang tính học thuật và nắm bắt được sự lựa chọn cá nhân. Đối với các ứng dụng mà bạn số lượng lớn INSERT chỉ 100 hàng theo yêu cầu, hãy gắn với các INSERT mở rộng.
Nói một cách công bằng, việc nói LOAD DATA INFILE nhanh hơn khi các câu lệnh INSERT bình thường là loại câu lệnh được tải chủ yếu vì cấu hình không được tính đến. Ngay cả khi bạn thiết lập điểm chuẩn giữa LOAD DATA INFILE và INSERT mở rộng với số lượng lớn_insert_buffer_size thích hợp, các nano giây được lưu khi phân tích cú pháp mỗi hàng chỉ có thể mang lại kết quả danh nghĩa tốt nhất cho LOAD DATA INFILE.
Hãy tiếp tục và thêm nó vào my.cnf
[mysqld]
bulk_inset_buffer_size=256M
Bạn cũng có thể thiết lập nó chỉ cho phiên của mình trước khi khởi chạy INSERT mở rộng
SET bulk_insert_buffer_size= 1024 * 1024 * 256;
CẬP NHẬT 2012-07-19 14:58 EDT
Để giữ mọi thứ trong phối cảnh, bộ đệm chèn số lượng lớn chỉ hữu ích để tải các bảng MyISAM, không phải InnoDB. Tôi đã viết một bài đăng gần đây hơn về tải hàng loạt InnoDB: Tải Mysql từ infile bị kẹt chờ trên ổ cứng
LOAD DATA INFILE
: Chèn tốc độ cao với MySQL . Điểm mấu chốt: bạn có thể đạt được 65% hiệu suất củaLOAD DATA INFILE
việc sử dụng các phần chèn mở rộng. Tôi đã nhận 240.000 chèn / giây trên phần cứng hiện đại.