Rumah >pangkalan data >tutorial mysql >Berapa Banyak Ruang Cakera Adakah Nilai NULL dalam PostgreSQL Benar-benar Digunakan?

Berapa Banyak Ruang Cakera Adakah Nilai NULL dalam PostgreSQL Benar-benar Digunakan?

Susan Sarandon
Susan Sarandonasal
2024-12-26 03:26:10816semak imbas

How Much Disk Space Do NULL Values in PostgreSQL Really Consume?

Kesan Nilai NULL pada Penggunaan Ruang Cakera PostgreSQL

Dalam PostgreSQL, keperluan storan untuk lajur yang membenarkan nilai NULL berbeza daripada yang menguatkuasakan nilai. Pertimbangkan takrifan lajur jadual berikut:

"MyColumn" smallint NULL

Menyimpan integer seperti 0, 1 atau sebarang nilai lain memerlukan 2 bait. Walau bagaimanapun, persoalan timbul: berapa banyak ruang cakera yang digunakan apabila "MyColumn" ditetapkan kepada NULL? Adakah ia menduduki 0 bait?

Bitmap lwn. NULL Storage

Bertentangan dengan andaian awal penggunaan 0 bait, nilai NULL tidak mengambil ruang. Sebaliknya, PostgreSQL menggunakan bitmap untuk menjejak status NULL bagi setiap lajur dalam jadual. Setiap bit dalam peta bit mewakili status NULL/BUKAN NULL untuk baris tertentu.

Walau bagaimanapun, peta bit tidak diperuntukkan untuk setiap baris. Sebaliknya, penjajaran data adalah faktor yang perlu dipertimbangkan. HeapTupleHeader, yang merangkumi maklumat tentang setiap baris, menduduki 23 bait. Data diselaraskan untuk bermula pada gandaan MAXALIGN (biasanya 8 bait), meninggalkan satu bait padding untuk peta bit nol.

Keperluan Ruang Cakera

Akibat daripada faktor-faktor ini, simpanan nol adalah percuma untuk jadual dengan sehingga 8 lajur. Walau bagaimanapun, untuk jadual dengan lebih banyak lajur, ruang cakera tambahan diperlukan seperti berikut:

  • Bait MAXALIGN tambahan (biasanya 8) diperuntukkan untuk kumpulan 64 lajur seterusnya.
  • Ruang ialah diperuntukkan hanya jika sekurang-kurangnya satu nilai NULL sebenar terdapat dalam baris.
  • Lajur yang digugurkan ditandakan sedemikian dalam katalog sistem masih menempati sedikit dalam peta bit nol.

Ujian Dunia Sebenar

Ujian yang meluas telah mengesahkan pemerhatian ini. Untuk butiran lanjut, rujuk perbincangan di:

  • https://dba.stackexchange.com/questions/4452/does-not-using-null-in-postgresql-still-use-a -null-bitmap-in-the-header

Atas ialah kandungan terperinci Berapa Banyak Ruang Cakera Adakah Nilai NULL dalam PostgreSQL Benar-benar Digunakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn