MySQL 是一種常見的數據庫管理系統。隨著數據量變大,數據庫性能的要求也越來越高。為了提高 MySQL 的性能,需要進行分表分區。
分表是將數據拆分成多個表格,每個表格存儲不同的數據。這樣可以避免單個表格數據量過大,導致查詢變慢。分表不僅可以減輕單個表格的數據負擔,更可以提高數據的可用性,增加故障容忍能力。
CREATE TABLE users_1 ( user_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, username VARCHAR(50) NOT NULL, email VARCHAR(255) NOT NULL, PRIMARY KEY (user_id), INDEX (username) ); CREATE TABLE users_2 ( user_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, username VARCHAR(50) NOT NULL, email VARCHAR(255) NOT NULL, PRIMARY KEY (user_id), INDEX (username) );
在上面的代碼中,我們可以看到我們通過在表名后添加數字的方式建立了兩個用戶表格:users_1 和 users_2。這兩個表格中的數據可以彼此獨立,但是所有用戶數據都可以在其中找到。
分區則是將表格數據分開,每一部分使用單獨的磁盤空間。這樣可以有效減少硬盤 I/O 和查詢時間。分區的方式有很多種,可以按照時間、地理位置、業務類型等多種方式進行。
CREATE TABLE employees ( id INT NOT NULL, birthday DATE NOT NULL, firstname VARCHAR(50) NOT NULL, lastname VARCHAR(50) NOT NULL, gender ENUM('M','F') NOT NULL, hiredate DATE NOT NULL, PRIMARY KEY (id,hiredate) ) PARTITION BY RANGE(YEAR(hiredate)) ( PARTITION p1 VALUES LESS THAN (1990), PARTITION p2 VALUES LESS THAN (2000), PARTITION p3 VALUES LESS THAN (2010), PARTITION p4 VALUES LESS THAN (MAXVALUE) );
上面的代碼中,我們將 employees 表格分為 4 個分區,根據員工入職日期將其分為 4 組,每個分區使用不同的磁盤空間。這樣可以輕松地管理和優化大量數據表格。