Bạn có thể sử dụng chèn hàng loạt JDBC.
PreparedStatement ps = cn.prepareStatement("INSERT INTO....");
for (int i = 0; i < 1000; i++) {
ps.setString(1, "value-" + i); // Set values
ps.addBatch(); // Add this to the batch
ps.clearParameters(); // Reset the parameters
}
ps.executeBatch();
Tuy nhiên MySQL không hỗ trợ chức năng batch chèn natively, vì vậy để có được hiệu suất hợp lý, bạn sẽ cần phải thêm rewriteBatchedStatements=true
để cấu hình mysql jdbc của bạn.
Ngoài ra còn có cú pháp chèn lô hàng cụ thể của MySQL mà bạn có thể sử dụng nếu bạn muốn tạo một chuỗi SQL lớn. Tôi sẽ thử cả hai và kiểm tra hiệu suất.
INSERT INTO x (a,b)
VALUES ('1', 'one'),
('2', 'two'),
('3', 'three');
Hãy cẩn thận với cả hai cách tiếp cận vì bạn có thể vượt quá kích thước gói tối đa cho một yêu cầu. Bạn có thể cần phải đặt kích thước lô khác với số lượng mục nhập trong bộ đệm của bạn. Ví dụ. bạn có thể cần chia 1000 mục trên 10 lô 100.
Nguồn
2010-08-08 18:22:06
Sử dụng phương pháp này một cách thận trọng. Tôi đã thấy các hệ thống đã thực hiện điều này trong quá khứ và chi phí tạo tệp trung gian và vận chuyển nó đến máy chủ đã vượt quá lợi ích hiệu suất của việc sử dụng thao tác tải tệp nhanh. –
Có vẻ rất nguy hiểm vì chúng tôi có hai máy chủ ứng dụng đồng thời truy cập vào cùng một cơ sở dữ liệu. Tôi thực sự sợ câu trả lời đó. Cảm ơn tất cả vì đã trả lời của bạn. –