Làm thế nào để chèn một lượng lớn hồ sơ vào cơ sở dữ liệu trong một thời gian ngắn?


8

Tôi phải chèn một loạt các bản ghi ( 500.000 ) vào cơ sở dữ liệu cùng một lúc, sử dụng cách nhanh nhất. Tôi đã thử chèn 1.700 hồ sơ cùng một lúc nhưng phải mất hai mươi phút !! Tôi đang sử dụng SQL-SERVER, và C#.

Mặc dù bảng sau đây sẽ không đóng góp cho kỹ thuật chèn nhanh, nhưng tôi quyết định liên kết nó bằng mọi cách để bạn hiểu rõ hơn về số lượng trường tôi cần chèn (nhân đôi khoảng 500 nghìn ).

Nhữn cánh đồng

Câu trả lời:


12

Có một số lựa chọn. Đây là những cái chính mà đến với tâm trí.

SSIS - Dịch vụ tích hợp máy chủ SQL: Đây là công cụ SQLL Máy chủ SQL và bạn có thể di chuyển dữ liệu từ khá nhiều nguồn sang bất kỳ đích nào và nó có thể khá nhanh.

BCP - Chương trình sao chép hàng loạt: Đây là một công cụ dòng lệnh đi kèm với SQL Server. Rất tốt trong việc di chuyển các tệp văn bản vào SQL Server hoặc bạn có thể xuất sang định dạng gốc từ một Máy chủ SQL và nhập bằng cách sử dụng định dạng tương tự vào Máy chủ SQL khác. BCP cũng rất nhanh nhưng hạn chế hơn một chút so với SSIS.

XÁC NHẬN VÀO danh sách trường CHỌN danh sách trường TỪ othertable : Điều này giả định rằng bạn đang di chuyển từ bảng SQL này sang bảng khác trên cùng một máy chủ. Đây là hàng nhanh nhất nhưng với 500 nghìn hàng bạn đang xem một giao dịch khá lớn hoặc phải phá vỡ nó như bạn đã nói.

KHAI THÁC : Đây là chức năng Máy chủ SQL cho phép bạn kéo dữ liệu vào một bảng từ các định dạng khác nhau. Nó cũng được cho là khá nhanh nhưng tôi đã không làm việc với nó nhiều.

Lưu ý chung: Khóa chính của bạn là mbr_id. Nếu đây là thứ được lưu trữ trong dữ liệu nguồn của bạn (trái ngược với cột nhận dạng), phần chèn của bạn sẽ NHIỀU nhanh hơn nếu dữ liệu nguồn theo thứ tự mbr_id.


0

Vì bạn đang sử dụng. NET, bạn thực sự có thể truyền dữ liệu vào mà không cần gọi một quy trình bên ngoài. Bạn sẽ sử dụng các tham số có giá trị bảng. Xem câu trả lời của tôi trên StackOverflow để biết chi tiết và liên kết đến một biến thể khác của phương pháp này:

https://stackoverflow.com/a/25815939/577765


0

Để làm cho nó nhanh hơn (đặc biệt nếu đây là dân số ban đầu của một bảng), hãy xem về cách loại bỏ các chỉ mục.

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.