Tôi đang sử dụng Apache Derby để lưu trữ một số lượng lớn các hàng theo thứ tự 10s của Hàng triệu. Mỗi khi tôi bắt đầu chèn hàng loạt, tôi sẽ chèn tối đa 2 Hàng triệu hàng vào bảng. Bảng có UUID làm khóa chính và một đường viền đơn với UUID trong một bảng khác. Việc chèn mất giờ! Tại sao ? Tôi đã tạo INDEX trên tất cả các bảng - nhưng tôi đã loại bỏ điều này vì tôi tin rằng Derby sẽ tự động tạo một INDEX cho mỗi bảng bằng một khóa chính. Tôi đang sử dụng cập nhật hàng loạt với một tuyên bố chuẩn bị như hướng dẫn (trong hình thức rất đơn giản dưới đây)Apache Derby INSERTS là chậm
final PreparedStatement addStatement = connection.prepareStatement(...)
int entryCount = 0;
for (final T entry : entries) {
addStatement.addBatch();
entryCount++;
if (entryCount % 1000 == 0) {
addStatement.executeBatch();
addStatement.clearBatch();
entryCount = 0;
}
addStatement.close();
Đây là kết quả
05/01/12 12:42:48 Creating 2051469 HE Peaks in DB Table APP.ST_HE_PEAK_TABLE
05/01/12 12:44:18 Progress: Written (10%) 205146/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE
05/01/12 12:46:51 Progress: Written (20%) 410292/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE
05/01/12 12:50:46 Progress: Written (30%) 615438/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE 05/01/12 12:56:46 Progress: Written (40%) 820584/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE
05/01/12 13:04:29 Progress: Written (50%) 1025730/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE
05/01/12 13:13:19 Progress: Written (60%) 1230876/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE
05/01/12 13:22:54 Progress: Written (70%) 1436022/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE
05/01/12 13:34:53 Progress: Written (80%) 1641168/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE
05/01/12 13:47:02 Progress: Written (90%) 1846314/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE
05/01/12 13:58:09 Completed: Written (100%) 2051469/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE - Time Taken:01:15:21
Như tôi đã chèn ngày càng có nhiều hàng, quá trình này sẽ chậm hơn và chậm hơn (có thể là do INDEX). Mô hình DB mà tôi có tại thời điểm này phục vụ cho mục đích của tôi tốt và tôi không muốn thay đổi nó. Tôi có làm gì sai không? ... hoặc mong đợi quá nhiều? Có cách nào để cải thiện tốc độ INSERT không?
Sửa
Tôi đã được điều chỉnh DB sử dụng autocommit và những người khác. Tôi thấy rằng khi INSERT hàng triệu bản ghi - nó mất một khoảng thời gian không hợp lý cho ứng dụng của tôi. SELECT trên dữ liệu này tất nhiên là rất nhanh.
Bạn biết mình có thể giữ dữ liệu liên tục trên đĩa với Derby và tải dữ liệu từ xa như ID bản ghi cuối cùng? _ (Xin lỗi vì điều hiển nhiên.) _ –