MySQL - Pemisahan Vertikal
Hai, para entusiast pengguna basis data! Hari ini, kita akan mendalami dunia yang menarik dari pemisahan vertikal MySQL. Sebagai guru komputer yang ramah di lingkungan sekitar Anda, saya sangat senang untuk memandu Anda dalam perjalanan ini, bahkan jika Anda baru saja memulai dalam pemrograman. Jangan khawatir; kita akan mengambil langkah demi langkah, dan sebelum Anda mengetahui, Anda akan memisahkan data seperti seorang ahli!
Pemisahan Vertikal MySQL
Imaginilah Anda memiliki sebuah kotak besar mainan (itu adalah basis data kita), dan Anda ingin mengaturnya lebih baik. Pemisahan vertikal seperti mengatur mainan Anda ke dalam kotak kecil berbeda berdasarkan karakteristik mereka. Dalam istilah basis data, itu adalah proses membagi kolom tabel menjadi tabel terpisah.
Marilah kita mulai dengan contoh sederhana:
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT,
email VARCHAR(100),
phone VARCHAR(20),
address TEXT
);
Ini adalah tabel students
asli kita. Sekarang, mari kita terapkan pemisahan vertikal:
CREATE TABLE students_main (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT
);
CREATE TABLE students_contact (
id INT PRIMARY KEY,
email VARCHAR(100),
phone VARCHAR(20)
);
CREATE TABLE students_address (
id INT PRIMARY KEY,
address TEXT
);
Di sini, kita telah membagi tabel asli kita menjadi tiga tabel kecil. Ini dapat meningkatkan performa, khususnya jika Anda sering mengakses hanya beberapa kolom saja.
Mengapa menggunakan pemisahan vertikal?
- Peningkatan performa kueri
- Manajemen data yang lebih baik
- Peningkatan keamanan ( Anda dapat membatasi akses ke data sensitif )
Sekarang, mari kita lihat bagaimana kita dapat memasukkan dan mengambil data dengan struktur baru ini:
-- Memasukkan data
INSERT INTO students_main VALUES (1, 'Alice', 20);
INSERT INTO students_contact VALUES (1, '[email protected]', '123-456-7890');
INSERT INTO students_address VALUES (1, '123 Main St, Anytown, USA');
-- Mengambil data
SELECT m.id, m.name, c.email, a.address
FROM students_main m
JOIN students_contact c ON m.id = c.id
JOIN students_address a ON m.id = a.id
WHERE m.id = 1;
Dengan cara ini, Anda masih dapat mendapatkan semua informasi tentang seorang siswa, tapi disimpan lebih efisien.
Pemisahan Kolom Rentang
Sekarang, mari kita naik tingkat dan bicarakan tentang pemisahan kolom rentang. Ini seperti mengatur buku Anda berdasarkan tahun terbitnya, tapi untuk beberapa kolom.
Ini adalah contoh menggunakan tabel sales
:
CREATE TABLE sales (
id INT NOT NULL,
sale_date DATE NOT NULL,
amount DECIMAL(10,2) NOT NULL
)
PARTITION BY RANGE COLUMNS(sale_date, amount) (
PARTITION p0 VALUES LESS THAN ('2023-01-01', 1000),
PARTITION p1 VALUES LESS THAN ('2023-01-01', 5000),
PARTITION p2 VALUES LESS THAN ('2023-07-01', 1000),
PARTITION p3 VALUES LESS THAN ('2023-07-01', 5000),
PARTITION p4 VALUES LESS THAN (MAXVALUE, MAXVALUE)
);
Dalam contoh ini, kita pemisahan berdasarkan sale_date
dan amount
. Ini memungkinkan kontrol yang lebih halus atas bagaimana data didistribusikan.
Marilah kita masukkan beberapa data dan lihat bagaimana itu bekerja:
INSERT INTO sales VALUES
(1, '2022-12-15', 500),
(2, '2022-12-20', 2000),
(3, '2023-03-10', 800),
(4, '2023-03-15', 3000),
(5, '2023-08-01', 1500);
-- Mari periksa partisi mana setiap rekord ditempatkan
SELECT *, PARTITION_NAME FROM INFORMATION_SCHEMA.PARTITIONS
WHERE TABLE_NAME = 'sales';
Query ini akan menunjukkan partisi mana setiap rekord ditempatkan berdasarkan kriteria rentang kita.
Pemisahan Kolom Daftar
Terakhir tapi bukan paling kurang, mari kita jelajahi pemisahan kolom daftar. Ini seperti mengatur pakaian Anda berdasarkan warna dan jenis - Anda bisa memiliki lemari untuk kaos merah, lainnya untuk celana biru, dan seterusnya.
Ini adalah contoh menggunakan tabel products
:
CREATE TABLE products (
id INT NOT NULL,
name VARCHAR(50),
category VARCHAR(20),
sub_category VARCHAR(20)
)
PARTITION BY LIST COLUMNS(category, sub_category) (
PARTITION p_electronics VALUES IN (('Electronics', 'Phones'), ('Electronics', 'Laptops')),
PARTITION p_clothing VALUES IN (('Clothing', 'Shirts'), ('Clothing', 'Pants')),
PARTITION p_other VALUES IN (('Books', 'Fiction'), ('Books', 'Non-fiction'))
);
Sekarang, mari kita tambahkan beberapa produk:
INSERT INTO products VALUES
(1, 'iPhone 12', 'Electronics', 'Phones'),
(2, 'MacBook Pro', 'Electronics', 'Laptops'),
(3, 'Levi\'s Jeans', 'Clothing', 'Pants'),
(4, 'Harry Potter', 'Books', 'Fiction');
-- Mari periksa partisi mana setiap produk ditempatkan
SELECT *, PARTITION_NAME FROM INFORMATION_SCHEMA.PARTITIONS
WHERE TABLE_NAME = 'products';
Query ini akan menunjukkan bagaimana setiap produk dikelompokkan ke dalam partisi masing-masing berdasarkan kategori dan sub-kategorinya.
Perbandingan Metode Pemisahan
Metode | Use Case | Keuntungan | Kerugian |
---|---|---|---|
Pemisahan Vertikal | Tabel besar dengan kolom yang jarang digunakan | Peningkatan performa kueri, manajemen data yang lebih baik | Join yang lebih kompleks untuk pengambilan data lengkap |
Pemisahan Kolom Rentang | Data berdasarkan rentang waktu atau nilai numerik | Efisien untuk kueri berdasarkan rentang, baik untuk data historis | Potensi distribusi data yang tidak merata |
Pemisahan Kolom Daftar | Data kategoris dengan beberapa atribut | Kontrol tepat atas penempatan data, baik untuk kategorisasi kompleks | Bisa menjadi rumit jika ada banyak kategori |
Dan begitu juga, teman-teman! Kita telah berpergian melalui tanah pemisahan vertikal MySQL, menjelajahi kerajaan pemisahan kolom rentang, dan menjelajahi wilayah pemisahan kolom daftar. Ingat, seperti mengatur kamar Anda, kunci desain basis data yang bagus adalah memasukkan hal-hal di tempat yang paling cocok dan mudah ditemukan. Terus latih, dan sebelum Anda mengetahui, Anda akan menjadi ahli pengatur basis data!
Credits: Image by storyset