Bất kỳ đề xuất nào phụ thuộc một phần vào vị trí của tập lệnh thực thi các truy vấn. Nếu tập lệnh thực thi các truy vấn nằm trên cùng một máy chủ với phiên bản MySQL thì bạn sẽ không thấy sự khác biệt nhiều như vậy, nhưng vẫn sẽ có một chi phí nhỏ trong việc thực hiện 200 nghìn truy vấn so với 1 thủ tục được lưu trữ.
Lời khuyên của tôi là mặc dù vậy, hãy biến nó thành một thủ tục được lưu trữ. Bạn có thể cần một vài thủ tục.
- Một thủ tục kết hợp 10 câu lệnh bạn thực hiện cho mỗi toán hạng cho 1 cuộc gọi
- Một thủ tục có thể lặp qua một bảng đối số bằng
CURSOR
để đưa vào quy trình 1
Quy trình của bạn sẽ là
- Điền vào bảng với các đối số sẽ được đưa vào thủ tục 1 bởi thủ tục 2
- Thực hiện thủ tục 2
Điều này sẽ mang lại lợi ích về hiệu suất vì không cần kết nối với máy chủ MySQL 20000 * 10 lần. Mặc dù tổng chi phí cho mỗi yêu cầu có thể nhỏ, nhưng mili giây sẽ tăng lên. Ngay cả khi mức tiết kiệm là 0,1 mili giây cho mỗi yêu cầu, thì 20 giây đó vẫn được tiết kiệm.
Một tùy chọn khác có thể là sửa đổi các yêu cầu của bạn để thực hiện tất cả 20k thao tác dữ liệu cùng một lúc (nếu khả thi) bằng cách điều chỉnh 10 truy vấn của bạn để lấy dữ liệu từ bảng cơ sở dữ liệu được đề cập ở trên. Chìa khóa của tất cả những điều này là tải các đối số trong một chèn hàng loạt duy nhất, sau đó sử dụng các câu lệnh trên máy chủ MySQL trong một quy trình để xử lý chúng mà không cần chuyển tiếp.