Saya menggunakan sp_spaceused
prosedur tersimpan bawaan sebelum dan sesudah melakukan operasi dalam perangkat lunak kami untuk melihat tabel mana yang memiliki sisipan baris dan bagaimana ukuran setiap tabel berubah.
Apa yang saya lihat adalah bahwa dari semua tabel yang mendapatkan baris ditulis untuk mereka, hanya sedikit yang menunjukkan bahwa tabel telah meningkat di samping. Yang lain yang menunjukkan baris ditambahkan tidak menunjukkan perubahan ukuran dari prosedur yang disimpan ini.
Satu-satunya kasus ini tidak benar adalah pada transaksi pertama setelah melakukan pemotongan pada semua tabel. Jadi bagi saya tampak bahwa alih-alih menyimpan data duplikat SQL Server menunjukkan baris dimasukkan tetapi harus hanya menyimpan pointer ke baris identik sebelumnya.
Adakah yang bisa mengkonfirmasi ini?
sumber
Jawaban:
Tidak, SQL Server tidak mendeteksi baris duplikat
SQL Server sedang mengisi halaman kosong atau sebagian kosong di dalam halaman yang dialokasikan.
Jadi jika saya memiliki baris yang sangat sempit (2 kolom katakan), saya dapat menambahkan beberapa ratus baris lagi di halaman yang sama tanpa menambah ruang yang digunakan.
Demo cepat dan kotor (tanpa baris duplikat, tetapi Anda dapat bermain dengan ini jika mau)
sumber
Itu tergantung pada versi SQL Server dan opsi kompresi data:
Jadi, untuk awalan dan kompresi kamus (kompresi halaman), SQL Server menggunakan pointer untuk menyimpan (sebagian atau seluruhnya) nilai duplikat (bukan baris duplikat) dalam kolom yang sama atau di dalam diff. kolom.
Hasil:
sumber