当先锋百科网

首页 1 2 3 4 5 6 7

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`);

横纵向分表可以结合使用,根据实际情况进行选择和使用。