MySQL - Partisi Vertikal

Halo, para entusiastanya basis data yang sedang berkembang! Hari ini, kita akan meluncur ke dalam dunia yang menarik dari partisi vertikal MySQL. Sebagai guru komputer yang ramah di lingkungan sekitar Anda, saya sangat gembira untuk mengantar Anda dalam perjalanan ini, bahkan jika Anda sangat baru dalam pemrograman. Jangan khawatir; kita akan mengambil langkah demi langkah, dan sebelum Anda tahu, Anda akan mempartisi data seperti seorang ahli!

MySQL - Vertical Partitioning

Partisi Vertikal MySQL

Bayangkan Anda memiliki sebuah kotak besar mainan (itu adalah basis data kita), dan Anda ingin mengaturnya lebih baik. Partisi vertikal seperti mengatur mainan Anda ke dalam kotak kecil berbeda berdasarkan karakteristiknya. 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 partisi 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 partisi vertikal?

  1. Peningkatan performa kueri
  2. Manajemen data yang lebih baik
  3. 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, tetapi disimpan lebih efisien.

Partisi Kolom Rentang

Sekarang, mari kita tingkatkan dan bicarakan tentang partisi kolom rentang. Ini seperti mengatur bukunya berdasarkan tahun penerbitannya, tetapi 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 mempartisi berdasarkan sale_date dan amount. Ini memungkinkan kontrol yang lebih halus atas bagaimana data didistribusikan.

Marilah kita memasukkan 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 kita periksa partisi mana yang dimasukkan setiap rekord
SELECT *, PARTITION_NAME FROM INFORMATION_SCHEMA.PARTITIONS
WHERE TABLE_NAME = 'sales';

Kueri ini akan menunjukkan partisi mana setiap rekord dimasukkan berdasarkan kriteria rentang kita.

Partisi Kolom Daftar

Akhirnya, mari kita jelajahi partisi kolom daftar. Ini seperti mengatur pakaian Anda berdasarkan warna dan jenis – Anda dapat memiliki lemari untuk kemeja merah, yang lain 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 kita periksa partisi mana yang dimasukkan setiap produk
SELECT *, PARTITION_NAME FROM INFORMATION_SCHEMA.PARTITIONS
WHERE TABLE_NAME = 'products';

Kueri ini akan menunjukkan bagaimana setiap produk dimasukkan ke dalam partisi berdasarkan kategori dan sub-kategorinya.

Perbandingan Metode Partisi

Metode Kasus Penggunaan Keuntungan Kerugian
Partisi Vertikal Tabel besar dengan kolom yang jarang digunakan Peningkatan performa kueri, manajemen data yang lebih baik Join yang lebih kompleks untuk pengambilan data lengkap
Partisi Kolom Rentang Data berdasarkan rentang waktu atau nilai numerik Efisien untuk kueri berdasarkan rentang, baik untuk data historis Potensi distribusi data yang tidak merata
Partisi Kolom Daftar Data kategoris dengan atribut ganda Kontrol yang tepat atas penempatan data, baik untuk kategorisasi kompleks Bisa menjadi sulit untuk dikelola jika ada banyak kategori

Dan begitu saja, teman-teman! Kita telah melakukan perjalanan melalui tanah partisi vertikal MySQL, mengeksplorasi kerajaan partisi kolom rentang, dan menjelajahi wilayah partisi kolom daftar. Ingat, seperti mengatur kamar Anda, kunci desain basis data yang bagus adalah menempatkan hal-hal di tempat yang paling cocok dan mudah ditemukan. Terus latihan, dan sebelum Anda tahu, Anda akan menjadi ahli pengatur basis data!

Credits: Image by storyset