Dengan asumsi kita berbicara tentang hubungan 1: 1 di antara semua tabel.
Penyimpanan keseluruhan praktis selalu (jauh) lebih murah dengan satu tabel daripada beberapa tabel dalam hubungan 1: 1. Setiap baris memiliki 28 byte overhead, ditambah biasanya beberapa byte lagi untuk padding tambahan. Dan Anda perlu menyimpan kolom PK di setiap meja. Dan memiliki indeks terpisah (redundan) pada masing-masing kolom ini ... Ukuran tidak masalah untuk kinerja.
Ini bahkan benar jika banyak kolom NULL di sebagian besar baris karena penyimpanan NULL sangat murah :
Sementara mengambil semua kolom satu tabel secara substansial lebih cepat dari 5 tabel yang bergabung bersama. Ini juga jauh lebih sederhana . Lima tabel mungkin sulit untuk bergabung jika tidak semua baris ada di semua tabel. Dengan WHERE
kondisi yang menargetkan satu tabel, cukup mudah untuk menambahkan tabel lain dengan LEFT JOIN
. Tidak sepele jika Anda memiliki predikat pada beberapa tabel ...
Partisi vertikal masih dapat meningkatkan kinerja kueri tertentu. Misalnya, jika 90% kueri Anda mengambil 5 kolom yang sama dari 65 yang tersedia, ini akan lebih cepat dengan tabel hanya menahan 5 kolom ini.
OTOH, Anda mungkin dapat memenuhi permintaan tersebut pada beberapa kolom yang dipilih dengan indeks "penutup" yang memungkinkan pemindaian hanya indeks .
Kandidat lain untuk partisi vertikal: Jika Anda memiliki banyak pembaruan hanya pada beberapa kolom, sedangkan sisanya hampir tidak pernah berubah. Mungkin jauh lebih murah untuk membagi baris dalam kasus seperti itu, karena Postgres menulis versi baris baru untuk setiap pembaruan. Ada pengecualian untuk nilai besar yang disimpan di luar jalur ("TOASTed"). Keterangan lebih lanjut:
Itu benar-benar tergantung pada situasi lengkap. Jika ragu, gunakan solusi sederhana untuk memiliki satu meja, terutama jika itu menggambarkan kenyataan dengan baik: Dalam contoh Anda, itu semua adalah atribut mobil dan masuk akal bersama.
VehicleInterior
, kueri lain yang hanya menangani kolom dariVehicleTechnical
, dll. Atau jika ada banyak baris / kendaraan yang sama sekali tidak memiliki info tentang (misalnya)VehicleExtra
jadi alih-alih banyak baris dengan banyak nol di satu tabel, Anda memiliki baris di sisa tabel dan tidak ada baris diVehicleExtra