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

Ubah jenis kolom dalam tabel besar

Bergantung pada perubahan apa yang Anda buat, terkadang lebih mudah untuk mengambil masa pemeliharaan. Selama jendela tersebut (di mana tidak seorang pun dapat mengubah data dalam tabel), Anda dapat:

  1. lepaskan indeks/batasan apa pun yang mengarah ke kolom lama, dan nonaktifkan pemicu
  2. tambahkan nullable baru kolom dengan tipe data baru (walaupun seharusnya NOT NULL)
  3. perbarui pengaturan kolom baru sama dengan nilai kolom lama (dan Anda dapat melakukan ini dalam potongan transaksi individual (misalnya, memengaruhi 10.000 baris sekaligus menggunakan UPDATE TOP (10000) ... SET newcol = oldcol WHERE newcol IS NULL ) dan dengan CHECKPOINT untuk menghindari pemborosan log Anda)
  4. setelah semua pembaruan selesai, jatuhkan kolom lama
  5. ganti nama kolom baru (dan tambahkan batasan NOT NULL jika sesuai)
  6. membangun kembali indeks dan memperbarui statistik

Kuncinya di sini adalah memungkinkan Anda untuk melakukan pembaruan secara bertahap di langkah 3, yang tidak dapat Anda lakukan dalam satu perintah ALTER TABLE.

Ini mengasumsikan bahwa kolom tidak memainkan peran utama dalam integritas data - jika kolom tersebut terlibat dalam sekumpulan hubungan kunci asing, ada lebih banyak langkah.

EDIT

Juga, dan hanya ingin tahu, saya belum melakukan pengujian apa pun untuk ini (tetapi menambahkannya ke daftar). Saya ingin tahu apakah kompresi halaman + baris akan membantu di sini? Jika Anda mengubah INT ke BIGINT, dengan kompresi di tempat SQL Server harus tetap memperlakukan semua nilai seolah-olah masih muat di INT. Sekali lagi, saya belum menguji apakah ini akan membuat perubahan lebih cepat atau lebih lambat, atau berapa lama waktu yang dibutuhkan untuk menambahkan kompresi. Buang saja.



  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 mendapatkan daftar Batasan Kunci Utama dari semua database di Instance SQL Server - Tutorial SQL Server / TSQL Bagian 60

  2. Mengapa NULL =NULL dievaluasi menjadi false di SQL server

  3. Kueri membandingkan tanggal dalam SQL

  4. Harus mendeklarasikan kesalahan variabel @myvariable dengan kueri berparameter ADO

  5. Pemindaian Mundur Indeks SQL Server:Memahami, Menyetel