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

Cập nhật 4 triệu bản ghi trong máy chủ SQL sử dụng danh sách id bản ghi làm đầu vào

Cách tốt nhất để tiếp cận câu hỏi này là chèn 4 triệu bản ghi vào một bảng. Trên thực tế, bạn có thể đặt chúng vào một bảng có cột nhận dạng bằng cách "chèn hàng loạt" vào chế độ xem.

create table TheIds (rownum int identity(1,1), id int);

create view v_TheIds (select id from TheIds);

bulk insert into v_TheIds . . .

Với tất cả dữ liệu trong cơ sở dữ liệu, giờ đây bạn có nhiều lựa chọn hơn. Hãy thử cập nhật:

update t
    set booleanfield = 1
    where exists (select 1 from TheIds where TheIds.id = t.id)

Bạn cũng nên tạo chỉ mục trên TheIds(id) .

Đây là một bản cập nhật lớn, tất cả đều thực hiện như một giao dịch. Điều đó có thể có tác động xấu đến hiệu suất và bắt đầu lấp đầy nhật ký. Bạn có thể chia nó thành các giao dịch nhỏ hơn bằng cách sử dụng rownum cột:

update t
    set booleanfield = 1
    where exists (select 1 from TheIds where TheIds.id = t.id and TheIds.rownum < 1000)

Mệnh đề tồn tại ở đây hoạt động tương đương với left outer join . Sự khác biệt chính là cú pháp truy vấn con tương quan này sẽ hoạt động trong các cơ sở dữ liệu khác, trong đó các phép nối với các bản cập nhật là dành riêng cho cơ sở dữ liệu.

Với rownum , bạn có thể chọn bao nhiêu hàng tùy ý cho bản cập nhật. Vì vậy, bạn có thể đặt bản cập nhật trong một vòng lặp, nếu bản cập nhật tổng thể quá lớn:

where rownum < 100000
where rownum between 100000 and 199999
where rownum between 200000 and 299999

và như thế. Bạn không phải làm điều này, nhưng bạn có thể làm nếu bạn muốn cập nhật hàng loạt vì lý do nào đó.

Ý tưởng chính là đưa danh sách id vào một bảng trong cơ sở dữ liệu, vì vậy bạn có thể sử dụng sức mạnh của cơ sở dữ liệu cho các hoạt động tiếp theo.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mệnh đề đầu ra của SQL Server thành một biến vô hướng

  2. Làm cách nào để sao chép cơ sở dữ liệu SQL Azure vào máy chủ phát triển cục bộ của tôi?

  3. Hàm tổng hợp tùy chỉnh (concat) trong SQL Server

  4. Làm thế nào để chia chuỗi thành các cột cho một khung nhìn?

  5. Các hàng SQL Server không thể chỉnh sửa cho Access sau khi Chèn