Tắt autocommit
và cam kết thủ công khi kết thúc chèn
Theo tài liệu MySQL 8.0. ( 8.5.5 Tải dữ liệu hàng loạt cho Bảng InnoDB )
Bạn có thể tăng tốc độ CHÈN bằng cách tắt tính năng tự động cam kết:
Cách khác để làm điều đó trong Laravel là sử dụng Giao dịch cơ sở dữ liệu :
DB::beginTransaction()
// Your inserts here
DB::commit()
Sử dụng INSERT
với nhiều VALUES
Cũng theo tài liệu MySQL 8.0 ( 8.2.5.1 Tối ưu hóa câu lệnh INSERT
) bạn có thể tối ưu hóa tốc độ CHÈN bằng cách sử dụng nhiều VALUES
trên một câu lệnh chèn duy nhất.
Để làm điều đó với Laravel, bạn chỉ có thể chuyển một mảng giá trị vào insert()
phương pháp:
DB::table('your_table')->insert([
[
'column_a'=>'value',
'column_b'=>'value',
],
[
'column_a'=>'value',
'column_b'=>'value',
],
[
'column_a'=>'value',
'column_b'=>'value',
],
]);
Theo tài liệu, nó có thể nhanh hơn nhiều lần.
Đọc tài liệu
Cả hai liên kết tài liệu MySQL mà tôi đặt trên bài đăng này đều có rất nhiều mẹo để tăng tốc độ INSERT.
Tránh sử dụng Laravel / PHP để chèn nó
Nếu nguồn dữ liệu của bạn là (hoặc có thể là) tệp CSV, bạn có thể chạy nó nhanh hơn rất nhiều bằng cách sử dụng mysqlimport
để nhập dữ liệu.
Việc sử dụng PHP và Laravel để nhập dữ liệu từ tệp CSV là một việc tốn kém, trừ khi bạn cần thực hiện một số xử lý dữ liệu trước khi chèn.