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

Hiệu suất SQL Server để thay đổi bảng thay đổi kiểu dữ liệu thay đổi cột

Thật trùng hợp, tôi đã phải làm một việc rất tương tự cách đây khoảng 3 giờ. Chiếc bàn dài 35m hàng, nó khá rộng và mất nhiều thời gian để làm việc này:

alter table myTable add myNewColumn int not null default 0;

Đây là những gì tôi đã kết thúc với:

alter table myTable add myNewColumn int null;

while 1=1
begin
    update top (100000) myTable
    set
        myNewColumn = 0
    where
        myNewColumn is null;

    if @@ROWCOUNT = 0 break;
end

alter table myTable alter column myNewColumn int not null;
alter table myTable add constraint tw_def_myNewColumn default (0) for myNewColumn;

Lần này, alter table tuyên bố gần như ngay lập tức. Mất khoảng 7-8 phút (trên máy chủ chậm) để thực hiện các đợt cập nhật. Tôi đang suy đoán rằng SQL Server đang tạo hoàn tác trong truy vấn ban đầu của tôi để khôi phục các giá trị, nhưng tôi không mong đợi điều đó bắt đầu.

Dù sao, trong trường hợp của bạn, có thể một cái gì đó tương tự sẽ hữu ích. Bạn có thể thử thêm một cột bigint mới, cập nhật cột mới theo lô, sau đó đặt các ràng buộc trê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. Cách sử dụng tham số với LIKE trong Sql Server Compact Edition

  2. Chuyển đổi chuỗi thành int trong linq thành các thực thể trên cơ sở dữ liệu lớn

  3. Ngắt dòng SQL không hoạt động

  4. Tham số giá trị bảng với các thủ tục được lưu trữ Dapper

  5. SQL Server JSON_Modify, Làm thế nào để Cập nhật tất cả?