Chèn nhiều hàng so với chèn nhiều hàng đơn


9

Trong ứng dụng của mình, tôi thực hiện chèn nhiều hàng khi tôi có thể chỉ vì nó giảm số chuyến đi khứ hồi giữa db và ứng dụng.

Tuy nhiên, tôi đã tò mò, có bất kỳ lợi thế khác? Ví dụ: nếu nhiều hàng được chèn cùng một lúc như thế này:

insert into tbl (c1, c2) values
(v1, v2)
(v3, v4)

đấu với:

insert into tbl (c1, c2) values (v1, v2)
insert into tbl (c1, c2) values (v3, v4)

và bảng có một chỉ mục, chỉ mục được tính một lần trong trường hợp đầu tiên và hai lần trong trường hợp thứ hai? Hoặc nó luôn luôn một lần cho mỗi lần chèn? Giả sử rằng cả hai truy vấn trong cùng một giao dịch.

Tôi đang sử dụng PostgreSQL.


2
Tôi nghĩ rằng chỉ mục được cập nhật một lần cho mỗi câu lệnh , không phải một lần mỗi hàng . Vì vậy, câu lệnh đơn sẽ hiệu quả hơn hai câu lệnh. Nhưng tôi không chắc chắn (do đó không có câu trả lời, chỉ là một nhận xét)
a_horse_with_no_name

1
Tôi nghĩ rằng câu hỏi đúng là, nó được gói gọn trong cùng một giao dịch. Ra khỏi dạ dày, nếu có cả hai trong một giao dịch, sẽ không có sự khác biệt.
user1363989

@ user1363989, tôi đã cập nhật câu hỏi của mình để cho biết rằng cả hai truy vấn sẽ có cùng một giao dịch
cdmckay

Câu trả lời:


5

Tôi nghĩ rằng @a_horse_with_no_name nói đúng rằng chỉ mục được cập nhật một lần cho mỗi câu lệnh, bởi vì nếu câu lệnh chưa hoàn thành việc thực thi thì dữ liệu sẽ không hiển thị vì nó đang được giao dịch. Và định nghĩa của một tuyên bố bao gồm có nhiều giá trị

Và việc tích hợp vào các tài liệu ở đây việc tạo / cập nhật chỉ mục hoạt động hiệu quả hơn với các đợt so với các câu lệnh đơn.

Ngoài ra còn có một bài viết hay từ Peter Manis về hiệu suất của các phương thức Chèn khác nhau mà tôi có thể đề xuất.

Một điều khác cần ghi nhớ là FILLFACTORchỉ số vì nó có ảnh hưởng đến hiệu suất như Fabien Coelho mô tả ở đây .


Nếu các truy vấn được bó trong một giao dịch, liệu cập nhật chỉ mục có xảy ra một lần cho mỗi câu lệnh không? Sẽ có một sự khác biệt hiệu suất do bất cứ điều gì khác? Tôi không thể truy cập một trong hai bài viết: bạn có thể vui lòng liên kết lại không?
batbrat

1

Tôi không tin rằng hiện tại có bất kỳ sự khác biệt tối ưu hóa nào trong lĩnh vực bảo trì chỉ số về vấn đề này.

Ngoài phí mạng, các ưu điểm khác của câu lệnh đa giá trị là phân tích cú pháp, khóa, v.v. (Mặc dù khóa bảng tblđược thực hiện bởi câu lệnh chèn đầu tiên và sau đó được duy trì trong suốt phần còn lại của giao dịch, mỗi lần chèn tuyên bố vẫn phải xác minh rằng khóa được giữ và xác minh này không miễn phí)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.