mysql merge table

本文通过具体的SQL语句展示了如何进行数据库表结构的优化,包括创建新表、数据迁移及索引设计等内容,对于理解数据库性能调优具有一定参考价值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SELECT COUNT(*) FROM `comment` 

SHOW CREATE TABLE `comment`

CREATE TABLE `comment1` (
  `id` INT(8) NOT NULL AUTO_INCREMENT,
  `blogUser` VARCHAR(20) NOT NULL,
  `replayUser` VARCHAR(20) NOT NULL,
  `articleId` INT(8) NOT NULL DEFAULT '0',
  `content` TEXT,
  `addTime` DATETIME NOT NULL,
  PRIMARY KEY (`id`),
  KEY `addTime` (`addTime`),
  KEY `replayUser` (`replayUser`)
) ENGINE=MYISAM AUTO_INCREMENT=1000004 DEFAULT CHARSET=utf8
INSERT INTO comment1 SELECT  `id` ,
  `blogUser`,
  `replayUser`,
  `articleId` ,
  `content` ,
  `addTime`
FROM `comment` LIMIT 0,500003

CREATE TABLE `comment2` (
  `id` INT(8) NOT NULL AUTO_INCREMENT,
  `blogUser` VARCHAR(20) NOT NULL,
  `replayUser` VARCHAR(20) NOT NULL,
  `articleId` INT(8) NOT NULL DEFAULT '0',
  `content` TEXT,
  `addTime` DATETIME NOT NULL,
  PRIMARY KEY (`id`),
  KEY `addTime` (`addTime`),
  KEY `replayUser` (`replayUser`)
) ENGINE=MYISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

INSERT INTO comment1 SELECT  `id` ,
  `blogUser`,
  `replayUser`,
  `articleId` ,
  `content` ,
  `addTime`
FROM `comment` LIMIT 500003,60000000

CREATE TABLE `allcomment` (
  `id` INT(8) NOT NULL AUTO_INCREMENT,
  `blogUser` VARCHAR(20) NOT NULL,
  `replayUser` VARCHAR(20) NOT NULL,
  `articleId` INT(8) NOT NULL DEFAULT '0',
  `content` TEXT,
  `addTime` DATETIME NOT NULL,
  PRIMARY KEY (`id`),
  KEY `addTime` (`addTime`),
  KEY `replayUser` (`replayUser`)
) ENGINE=MERGE UNION (comment1, comment2) INSERT_METHOD=LAST AUTO_INCREMENT=1 ; 

SELECT COUNT(*) FROM `allcomment`

### MySQL 数据合并操作 #### 使用 `UNION` 和 `UNION ALL` 在 MySQL 中,`UNION` 和 `UNION ALL` 是用于合并多个查询结果集的强大工具。`UNION` 操作符会合并并去除重复的结果行,而 `UNION ALL` 则保留所有的行,包括重复项。为了确保这两个操作的成功执行,所涉及的查询必须返回相同数量和兼容类型的列。 ```sql SELECT column_name(s) FROM table1 UNION SELECT column_name(s) FROM table2; ``` 对于包含所有记录的情况: ```sql SELECT column_name(s) FROM table1 UNION ALL SELECT column_name(s) FROM table2; ``` 当需要从不同表中提取相似结构的数据时,这两种方法都非常有用[^2]。 #### 基于特定字段进行分组与聚合 针对业务逻辑复杂度较高的情况,可以采用基于某些字段进行分组的方式来进行数据合并。例如,在处理大量数据查重合并的任务时,可以通过 `GROUP BY` 子句加上 `GROUP_CONCAT()` 函数来实现这一目标。这允许系统根据指定的标准对记录进行分类汇总,并将同一类别的 ID 或其他属性连接成一个字符串列表以便进一步处理。 ```sql SELECT GROUP_CONCAT(RS.alumniuser_id) AS groupAlumniIds FROM ( SELECT au.* FROM alumniuser au WHERE au.isdelete = 0 AND au.organizationId = 1 GROUP BY au.alumniuser_id ) RS GROUP BY RS.name HAVING COUNT(*) > 1 LIMIT 100; ``` 这段 SQL 查询展示了如何在一个拥有三十万条记录的大规模数据库环境中有效地识别并管理重复项[^3]. #### 处理一对多关系下的数据合并 面对一对多的关系模型,即一张主表关联着另一张或多张子表的情况下,也可以利用 `GROUP_CONCAT()` 来简化展示形式。下面的例子说明了怎样把客户联系人的名字及其电话号码按顾客编号组合起来显示在同一行内: ```sql SELECT CUST_ID, CUST_NAME, CUST_ADDR, GROUP_CONCAT(CONTACT_NAME SEPARATOR ', ') AS CONTACT_NAMES, GROUP_CONCAT(DISTINCT CONTACT_PHONE ORDER BY CONTACT_PHONE DESC SEPARATOR '; ') AS PHONE_NUMBERS FROM customer JOIN contacts ON customer.CUST_ID = contacts.CUSTOMER_ID GROUP BY CUST_ID, CUST_NAME, CUST_ADDR; ``` 此代码片段不仅实现了基本的一对多数据合并功能,还加入了去重(`DISTINCT`)以及排序(`ORDER BY`)选项以增强输出质量[^5].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值