Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Kinerja SQL Server untuk tabel ubah, ubah kolom, ubah tipe data

Secara kebetulan, saya harus melakukan sesuatu yang sangat mirip sekitar 3 jam yang lalu. Mejanya 35m baris, cukup lebar, dan butuh waktu lama untuk melakukan ini:

alter table myTable add myNewColumn int not null default 0;

Inilah yang akhirnya saya lakukan:

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;

Kali ini, alter table pernyataan yang hampir instan. Butuh sekitar 7-8 menit (pada server yang lambat) untuk melakukan batch pembaruan. Saya berspekulasi bahwa SQL Server menghasilkan undo dalam kueri asli saya untuk mengembalikan nilai, tetapi saya tidak berharap itu dimulai.

Bagaimanapun, dalam kasus Anda, mungkin sesuatu yang serupa akan membantu. Anda dapat mencoba menambahkan kolom bigint baru, memperbarui kolom baru secara berkelompok, lalu mengatur batasannya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Memperbaiki "Permintaan TRANSAKSI KOMIT tidak memiliki TRANSAKSI AWAL yang sesuai" di SQL Server

  2. SQL Server:Hanya entri terakhir di GROUP BY

  3. Bisakah Anda memanggil layanan web dari kode TSQL?

  4. Konversi dari UniqueIdentifier ke BigInt dan Kembali?

  5. Kolom mirip identitas tetapi berdasarkan kriteria Kelompokkan