Tôi có một ứng dụng cần cập nhật một lượng lớn dữ liệu qua một số lượng lớn mục nhập. Về cơ bản nó làm một số 7.000 chèn và/hoặc cập nhật nhưng phải mất một thời gian looooong (như gần 9 phút ... trung bình khoảng 0,08 giây cho mỗi truy vấn). Về cơ bản tôi đang tìm kiếm những cải tiến chung để thực hiện nhiều yêu cầu như vậy (tôi không mong đợi một câu trả lời cụ thể cho ví dụ mơ hồ của tôi ... đó chỉ là, hy vọng, giúp giải thích).Tăng tốc số lượng lớn các cập nhật mysql và chèn
Dưới đây là một số mẫu từ profiling các yêu cầu: nauseam quảng cáo
SELECT `habitable_planets`.* FROM `habitable_planets` WHERE (timestamp = '2010-10-15T07:30:00-07:00') AND (planet_id = '2010_Gl_581_c')
INSERT INTO `habitable_planets` (`planet_id`, `timestamp`, `weather_air_temp`, `weather_cell_temp`, `weather_irradiance`, `weather_wind_float`, `biolumin_to_date`, `biolumin_detected`, `craft_energy_usage`, `craft_energy_consumed_to_date`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
SELECT `habitable_planets`.* FROM `habitable_planets` WHERE (timestamp = '2010-10-15T07:45:00-07:00') AND (planet_id = '2010_Gl_581_c')
INSERT INTO `habitable_planets` (`planet_id`, `timestamp`, `weather_air_temp`, `weather_cell_temp`, `weather_irradiance`, `weather_wind_float`, `biolumin_to_date`, `biolumin_detected`, `craft_energy_usage`, `craft_energy_consumed_to_date`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Lặp lại (tốt, khoảng 7.000 lần). Đây là bản cập nhật thu thập dữ liệu được tạo trong khoảng thời gian 24 giờ và sau đó thực hiện cập nhật lớn cho cơ sở dữ liệu một lần mỗi ngày. Với giới hạn bit tôi đã cho thấy bạn đang có bất cứ đề nghị để đẩy nhanh quá trình này lên?
Ví dụ ... có nghĩa là, thay vì chọn một dấu thời gian cho mỗi dấu thời gian, hãy thực hiện một lựa chọn cho một phạm vi cùng một lúc và sau đó lặp lại chúng trong tập lệnh?
Mơ hồ như:
SELECT `habitable_planets`.* FROM `habitable_planets` WHERE (planet_id = '2010_Gl_581_c')
assign mà kết quả để $foo
và sau đó làm:
foreach ($foo as $bar)
{
if ($bar['timestamp'] == $baz) // where $baz is the needed timestamp
{
// do the insert here
}
}
EDIT: Để thêm một chút để này, một điều mà cải thiện đáp ứng trong tình huống của tôi là để thay đổi một loạt mã đã kiểm tra bản ghi hiện có và đã thực hiện chèn hoặc cập nhật tùy thuộc vào kết quả sử dụng truy vấn sql INSERT... ON DUPLICATE KEY UPDATE
. Điều này dẫn đến tăng tốc độ 30% trong trường hợp cụ thể của tôi bởi vì nó cắt ít nhất một chuyến đi tới cơ sở dữ liệu ra khỏi phương trình và hơn hàng nghìn yêu cầu thực sự tăng lên.
+1. Câu trả lời tốt. – sberry