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

Ukuran Baris Maksimum SQL Server Vs Varchar (Maks) ukuran

Di Microsoft SQL Server, data (termasuk indeks) disimpan dalam satu atau lebih "halaman" 8k (8192 byte). Ada berbagai jenis halaman yang dapat digunakan untuk menangani berbagai situasi (misalnya Data, LOB, Index, AllocationMap, dll) . Setiap halaman memiliki header yang merupakan meta-data tentang halaman tersebut dan isinya.

Sebagian besar data disimpan di baris itu sendiri, dan satu atau lebih baris ini pada gilirannya disimpan di halaman untuk "data dalam baris". Karena ruang yang diambil oleh header baris, baris terbesar yang dapat dibuat (untuk data "dalam baris") adalah 8060 byte.

Namun, tidak semua data disimpan dalam baris. Untuk tipe data tertentu, data sebenarnya dapat disimpan pada halaman "data LOB" sementara pointer tertinggal di data "dalam-baris":

  • Jenis LOB lama/tidak digunakan lagi yang tidak boleh digunakan lagi (TEXT , NTEXT , dan IMAGE ), secara default, selalu simpan datanya di halaman LOB dan selalu gunakan pointer 16 byte ke halaman LOB tersebut.

  • Jenis LOB yang lebih baru (VARCHAR(MAX) , NVARCHAR(MAX) , VARBINARY(MAX) , dan XML ), secara default, akan mencoba menyesuaikan data secara langsung di baris jika cocok. Jika tidak, ia akan menyimpan data pada halaman LOB dan menggunakan pointer 24-72 byte (tergantung pada ukuran data LOB).

Ini adalah bagaimana Anda dapat menyimpan hingga 78 GB + 4 byte (jangan lupa tentang INT Kunci Utama;-) dalam satu baris:ukuran baris maksimum adalah antara 940 byte ((39 * 24) + 4) dan 2812 byte ((39 * 72) + 4). Tapi sekali lagi, itu hanya kisaran maksimum; jika data di masing-masing 39 VARCHAR(MAX) kolom hanya 10 byte, maka semua data akan disimpan dalam baris dan ukuran baris akan menjadi 394 byte ((39 * 10) + 4).

Mengingat bahwa Anda memiliki begitu banyak bidang dengan panjang variabel (apakah MAX atau tidak), satu-satunya cara untuk memperkirakan ukuran baris di masa mendatang adalah dengan memiliki gagasan bagus tentang data apa yang akan Anda simpan di tabel ini. Meskipun, tabel dengan semua, atau bahkan sebagian besar, tipe data MAX menyiratkan bahwa tidak ada yang benar-benar tahu apa yang akan disimpan dalam tabel ini.

Sejalan dengan itu, harus ditunjukkan bahwa ini adalah tabel yang dimodelkan dengan buruk / penggunaan bidang tipe data MAX yang mengerikan, dan harus difaktorkan ulang.

Untuk detail lebih lanjut tentang bagaimana halaman data disusun, silakan lihat jawaban saya untuk pertanyaan DBA.StackExchange berikut:

SUM DATALENGTHs tidak cocok dengan ukuran tabel dari sys.allocation_units



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server:Ekstrak Tabel Meta-Data (deskripsi, bidang dan tipe datanya)

  2. Apa cara terbaik untuk mengontrol versi prosedur tersimpan server SQL saya?

  3. Bagaimana cara memindahkan tabel ke FileGroup tertentu di SQL Server 2008

  4. Mendapatkan pengidentifikasi basis data unik untuk SQL Server 2005 dan yang lebih baru

  5. Masukkan beberapa baris ke dalam satu kolom