Nói chung, bạn có thể sử dụng bất kỳ một hoặc nhiều cách sau:
- Bắt đầu giao dịch, thực hiện chèn, cam kết
- Gói nhiều giá trị vào một lần chèn duy nhất vào truy vấn
- Bỏ bất kỳ ràng buộc nào trước khi thực hiện chèn và khôi phục các ràng buộc sau khi chèn hàng loạt (ngoại trừ có thể là khóa chính, tuy nhiên, không chắc chắn lắm về điều đó)
- Sử dụng
insert into ... select
nếu phù hợp
Cách đầu tiên (sử dụng các giao dịch) có nhiều khả năng hữu ích, nhưng tôi không chắc liệu nó có hoạt động trên các bảng myisam hay không, với innodb thì nó hoạt động rất tốt - tôi chỉ sử dụng những thứ đó khi tôi buộc phải sử dụng mysql, tôi thích postgresql hơn .
Trong trường hợp cụ thể của bạn, khi chèn 100000 hàng dữ liệu, bạn có thể làm như sau:
INSERT INTO status(id, responseCode, lastUpdate) SELECT @row := @row + 1 as row, 503, NOW() FROM
(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t,
(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t2,
(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t3,
(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t4,
(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t5,
(SELECT @row:=0) t6;
Đã kiểm tra điều này trên máy của tôi, nhận được:
Query OK, 100000 rows affected (0.70 sec)
Records: 100000 Duplicates: 0 Warnings: 0
Tôi khá chắc rằng bạn không thể nhanh hơn nhiều so với 100000 hàng.