Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk menggunakan pengarkiban data dalam MySQL untuk mengoptimumkan ruang storan?

Bagaimana untuk menggunakan pengarkiban data dalam MySQL untuk mengoptimumkan ruang storan?

WBOY
WBOYasal
2023-07-29 20:22:571290semak imbas

Bagaimana untuk menggunakan pengarkiban data dalam MySQL untuk mengoptimumkan ruang storan?

Pengenalan:
Memandangkan jumlah data terus berkembang, keperluan storan pangkalan data juga semakin meningkat. Untuk mengoptimumkan ruang storan, kami boleh mengalihkan data yang jarang diakses ke jadual arkib melalui pengarkiban data, dan menggunakan fungsi pembahagian MySQL untuk meningkatkan lagi prestasi pertanyaan. Artikel ini akan memperkenalkan cara menggunakan pengarkiban data dalam MySQL untuk mengoptimumkan ruang storan, dan menyediakan contoh kod yang berkaitan untuk rujukan pembaca.

1. Apakah itu pengarkiban data?
Pengarkiban data merujuk kepada memindahkan data yang jarang diakses ke jadual arkib bebas, dengan itu mengurangkan jumlah data dalam jadual utama. Jadual arkib tidak mengambil bahagian dalam operasi pertanyaan biasa, tetapi ia masih mengekalkan keupayaan untuk membuat pertanyaan dan menganalisis data sejarah. Ini boleh mengosongkan ruang storan yang berharga tanpa menjejaskan operasi perniagaan biasa.

2. Langkah pengarkiban data dan kod sampel:
Berikut ialah langkah dan kod contoh untuk menggunakan pengarkiban data untuk mengoptimumkan ruang storan:

Langkah 1: Buat jadual utama dan jadual arkib

--Buat jadual utama
BUAT JADUAL jadual_utama (main_table (
id INT(11) NOT NULL AUTO_INCREMENT,
col1 VARCHAR(255) NOT NULL,
col2 INT(11) NOT NULL,
created_at DATETIME NOT NULL,
PRIMARY KEY (id),
KEY idx_col1 (col1)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 创建归档表
CREATE TABLE archive_table (
id INT(11) NOT NULL AUTO_INCREMENT,
col1 VARCHAR(255) NOT NULL,
col2 INT(11) NOT NULL,
created_at DATETIME NOT NULL,
PRIMARY KEY (id),
KEY idx_col1 (col1)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

步骤二:创建分区表

-- 创建主表的分区表
ALTER TABLE main_table PARTITION BY RANGE (YEAR(created_at))
(
PARTITION p2020 VALUES LESS THAN (2021),
PARTITION p2021 VALUES LESS THAN MAXVALUE
);

步骤三:创建触发器

-- 创建触发器,将数据插入到归档表中
DELIMITER //
CREATE TRIGGER archive_trigger AFTER DELETE ON main_table
FOR EACH ROW
BEGIN
INSERT INTO archive_table VALUES (OLD.id, OLD.col1, OLD.col2, OLD.created_at);
END//

DELIMITER ;

步骤四:测试数据插入和查询效果

-- 向主表中插入测试数据
INSERT INTO main_table (col1, col2, created_at) VALUES ('data1', 1, '2020-01-01');
INSERT INTO main_table (col1, col2, created_at) VALUES ('data2', 2, '2021-01-01');

-- 查询主表数据
SELECT * FROM main_table;

-- 查询归档表数据
SELECT * FROM archive_table;

步骤五:定期归档数据

-- 定期将旧数据归档到归档表中
DELIMITER //
CREATE EVENT archive_event
ON SCHEDULE EVERY 1 WEEK STARTS NOW()
DO
BEGIN
INSERT INTO archive_table SELECT * FROM main_table WHERE created_at < DATE_SUB(NOW(), INTERVAL 1 MONTH);
DELETE FROM main_table id INT(11) BUKAN NULL AUTO_INCREMENT,
col1 VARCHAR(255) BUKAN NULL,

col2 INT(11) BUKAN NULL,

dicipta_pada MASA TARIKH BUKAN NULL,

KUNCI UTAMA (id),

KEY idx_col1 (col1 )

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;


-- Cipta jadual arkib

BUAT JADUAL jadual_arkib (🎜 id INT(11) BUKAN NULL AUTO_INCREMENT ,🎜 col1 VARCHAR(255) NOT NULL,🎜 col2 INT(11) NOT NULL,🎜 created_at DATETIME NOT NULL,🎜 PRIMER KEY ( id),🎜 KEY idx_col1 (col1)🎜) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;🎜🎜Langkah 2: Buat partition table🎜🎜 -- Cipta jadual partition bagi jadual utama🎜UBAH JADUAL jadual_utama PARTITION MENGIKUT Julat (TAHUN(dicipta_pada))🎜(🎜 PARTITION p2020 NILAI KURANG DARIPADA (2021),🎜21PARTISI P20 THAN MAXVALUE🎜); 🎜🎜Langkah 3: Buat pencetus🎜🎜--Buat pencetus dan masukkan data ke dalam jadual arkib🎜DELIMITER //🎜BUAT PENCETUS archive_trigger SELEPAS PADAMKAN PADA /code> 🎜 UNTUK SETIAP BARIS 🎜MULA 🎜 MASUKKAN KE DALAM archive_table NILAI (OLD.id, OLD.col1, OLD.col2, OLD.created_at); 4: Data ujian Sisipan dan kesan pertanyaan🎜🎜--Sisipkan data ujian ke dalam jadual utama🎜MASUKKAN KE DALAM jadual_utama (col1, col2, created_at) NILAI ('data1', 1, '2020-01- 01'); 🎜MASUKKAN KE DALAM jadual_utama (col1, col2, created_at) NILAI ('data2', 2, '2021-01-01');🎜🎜-- Tanya data jadual utama🎜PILIH * DARI jadual_utama;🎜🎜--Pertanyaan data jadual arkib🎜PILIH * DARI jadual_arkib;🎜🎜Langkah 5: Arkibkan data secara kerap🎜🎜--Arkibkan data lama ke dalam jadual arkib selalu🎜DELIMITER //🎜BUAT ACARA acara_arkib 🎜PADA JADUAL SETIAP 1 MINGGU BERMULA SEKARANG() 🎜LAKUKAN 🎜MULA 🎜 MASUKKAN KE DALAM jadual_arkib PILIH *_DARI kod> DI MANA dibuat_pada < DATE_SUB(NOW(), INTERVAL 1 MONTH);🎜 PADAM DARIPADA main_table DI MANA dibuat_at < DATE_SUB(NOW(), INTERVAL 1 MONTH);🎜END //🎜🎜DELIMITER ;🎜🎜 Melalui langkah dan contoh kod di atas, kami telah melaksanakan operasi pengarkiban data. Data dalam jadual utama dibahagikan mengikut masa penciptaan, dan data yang dipadamkan dimasukkan ke dalam jadual arkib melalui pencetus. Pada masa yang sama, kami juga mengarkibkan data yang telah tamat tempoh dari jadual utama ke jadual arkib dengan kerap mengarkibkan data. 🎜🎜3. Kesimpulan🎜Dengan menggunakan teknologi pengarkiban data, kami boleh mengurangkan jumlah data dalam jadual utama dan mengoptimumkan ruang storan. Pada masa yang sama, dengan menggunakan fungsi pembahagian MySQL, kami juga boleh meningkatkan prestasi pertanyaan. Kami berharap pengenalan dan contoh kod artikel ini dapat membantu pembaca memahami dan menggunakan teknologi pengarkiban data dengan lebih baik. 🎜

Atas ialah kandungan terperinci Bagaimana untuk menggunakan pengarkiban data dalam MySQL untuk mengoptimumkan ruang storan?. 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