MySQL是一種使用廣泛的關系型數據庫,橫縱向分表是優化數據庫的一種方式。
橫向分表是將一張表水平切分成多個表,每個表只保存一部分數據。這種方式適用于數據量非常大并且數據表結構相對固定的情況。例如,我們可以將用戶表按照城市或者地區進行切分,每個表只保存特定地區或城市的用戶數據。
CREATE TABLE `user_shanghai` ( `id` INT(11) AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(255) NOT NULL, `email` VARCHAR(255) NOT NULL, `phone` VARCHAR(20) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `user_beijing` ( `id` INT(11) AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(255) NOT NULL, `email` VARCHAR(255) NOT NULL, `phone` VARCHAR(20) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
縱向分表是將一張表垂直切分成多個表,每個表只保存一部分字段,每個表的主鍵都引用同一張表的主鍵。這種方式適用于一張表的字段非常多,但有些字段很少使用,并且表的行數不是很大的情況。例如,我們可以將用戶表的基本信息字段和聯系方式字段劃分到兩張表中,每張表只保存對應的字段數據。
CREATE TABLE `user_info` ( `id` INT(11) AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(255) NOT NULL, `email` VARCHAR(255) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `user_contact` ( `id` INT(11) AUTO_INCREMENT PRIMARY KEY, `user_id` INT(11) NOT NULL, `phone` VARCHAR(20) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ALTER TABLE `user_contact` ADD CONSTRAINT `fk_user_contact_user` FOREIGN KEY (`user_id`) REFERENCES `user_info`(`id`);
橫縱向分表可以結合使用,根據實際情況進行選擇和使用。