Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách nhanh nhất để chèn / cập nhật một triệu hàng trong Laravel 5.7

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để lấy loại câu lệnh truy vấn trong PDO?

  2. Bắt đầu xem kết quả truy vấn trước khi kết thúc truy vấn

  3. Truy vấn cập nhật MySQL với tham gia bên trái và nhóm theo

  4. cách lưu chỉ thời gian không phải ngày tháng trong cơ sở dữ liệu thông qua truy vấn sql

  5. Biểu mẫu PHP trả về Thông báo:Chuyển đổi mảng thành chuỗi