mysql插表简单处理办法
Posted SDingBa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql插表简单处理办法相关的知识,希望对你有一定的参考价值。
最近由于原先的单表数据项太多,决定拆成2张表,形成一对多的关系,
拆表原因:原数据表,以某id和时间(day)来 联合唯一索引, 随着数据越来越多,同一个某id的无用数据太多,每天存储的有用数据只有表字段的1/3,于是决定分表拆表,实现一对多的结构.最近由于原先的单表数据项太多,决定拆成2张表,形成一对多的关系,
拆表原因:原数据表,以某id和时间(day)来 联合唯一索引, 随着数据越来越多,同一个某id的无用数据太多,每天存储的有用数据只有表字段的1/3,于是决定分表拆表,实现一对多的结构.
先来看看原来的表结构:先来看看原来的表结构:
CREATE TABLE `ad_sdingba` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`xxxx` varchar(50) DEFAULT NULL COMMENT '名称',
`xxxx` datetime DEFAULT NULL,
`xxxx` datetime DEFAULT NULL,
`xxxx` varchar(10) DEFAULT NULL COMMENT '花费',
`xxxx` int(11) DEFAULT NULL COMMENT '激活数',
`xxxx` varchar(10) DEFAULT '' COMMENT '点击单价',
`xxxx` int(11) DEFAULT NULL COMMENT '点击数',
`xxxx` varchar(10) DEFAULT NULL COMMENT '激活成本',
`xxxx` varchar(10) DEFAULT NULL COMMENT '千次展现价格',
`xxxx` int(11) DEFAULT NULL COMMENT '展示数',
`xxxx` tinyint(1) NOT NULL DEFAULT '0' COMMENT '计划状态 0 停止 1 运行',
`xxxx` varchar(50) DEFAULT NULL,
`xxxx` varchar(100) DEFAULT NULL COMMENT '标题',
`xxxx` varchar(400) DEFAULT NULL COMMENT '内容',
`record_day` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`xxxx` varchar(10) DEFAULT NULL COMMENT '出价',
`xxxx` varchar(50) DEFAULT NULL COMMENT '投放平台',
`xxxx` varchar(10) DEFAULT NULL COMMENT '点击率',
`ad_id` varchar(20) DEFAULT NULL,
`origi_id` varchar(20) DEFAULT NULL,
`xxxx` int(11) DEFAULT NULL,
`xxxx` varchar(32) DEFAULT NULL COMMENT '产品 id',
`xxxx` int(11) DEFAULT NULL COMMENT '创建者Id',
`xxxx` int(11) DEFAULT NULL COMMENT '平台',
`xxxx` VARCHAR(10) DEFAULT NULL COMMENT '付费数据',
PRIMARY KEY (`id`),
UNIQUE KEY `adId_origi` (`origi_id`,`record_day`)
)
于是拆分2张表:
1,基本数据表于是拆分2张表:
1,基本数据表
create table ad_origi(
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`xxxx` varchar(50) DEFAULT NULL COMMENT '名称',
`xxxx` datetime DEFAULT NULL COMMENT '开始时间',
`xxxx` datetime DEFAULT NULL COMMENT '结束时间',
`xxxx` tinyint(1) NOT NULL DEFAULT '0' COMMENT '计划状态 0 停止 1 运行',
`xxxx` varchar(100) DEFAULT NULL COMMENT '标题',
`xxxx` varchar(400) DEFAULT NULL COMMENT '内容',
`bxxxd` varchar(10) DEFAULT NULL COMMENT '出价',
`xxxx` varchar(50) DEFAULT NULL COMMENT '投放平台',
`xxxx` varchar(20) DEFAULT NULL COMMENT '计划id',
`origi_id` varchar(20) DEFAULT NULL COMMENT '创意id',
`xxxx` varchar(50) DEFAULT NULL COMMENT '投放状态,对应投放平台爬取数据',
`xxxx` varchar(32) DEFAULT NULL COMMENT '产品',
`xxxx` int(11) DEFAULT NULL COMMENT '创建者Id',
`xxxx` int(11) DEFAULT NULL COMMENT '平台',
PRIMARY KEY (`id`),
UNIQUE KEY `creative_id` (`origi_id`)
);
2,创意日期投放数据表 ,(每日投放创意 数据,点击,激活,等每日变动数据…)2,创意日期投放数据表 ,(每日投放创意 数据,点击,激活,等每日变动数据…)
create table ad_origi_data(
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`xxxx` varchar(10) DEFAULT NULL COMMENT '花费',
`xxxx` int(11) DEFAULT 0 COMMENT '激活数',
`xxxx` int(11) DEFAULT 0 COMMENT '展示数',
`xxxx` int(11) DEFAULT 0 COMMENT '点击数',
`xxxx` int(11) DEFAULT 0 COMMENT '延时激活',
`xxxx` int default 0 COMMENT '实时点击数据',
`xxxx` varchar(10) DEFAULT '' COMMENT '点击单价',
`xxxx` varchar(10) DEFAULT NULL COMMENT '激活成本',
`xxxx` varchar(10) DEFAULT NULL COMMENT '千次展现价格',
`roi` VARCHAR(10) DEFAULT NULL COMMENT '创意roi 付费数据',
`xxxx` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最新激活时间',
`xxxx` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新点击时间',
`origi_id` varchar(20) DEFAULT NULL COMMENT '创意id',
`xxxx` varchar(10) DEFAULT NULL COMMENT '点击率',
`record_day` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录时间',
PRIMARY KEY (`id`),
UNIQUE KEY `adId_origi` (`origi_id`,`record_day`)
);
2,数据问题,,导出原来的数据到新表
-- 修改 ad_origi 数据 (把ad_originality表的数据 复制到 新表ad_origi)
insert into crm.ad_origi(name,start_time,end_time,running,title,comment,bid,platform,ad_id,origi_id,product_id,create_user_id,os)
select name,start_time,end_time,running,title,comment,bid,platform,ad_id,origi_id,product_id,create_user_id,os from ad_originality group by origi_id;
-- 修改 ad_origi_data 数据; (把ad_originality表的数据 复制到 新表ad_origi_data)
insert into crm.ad_origi_data(stat_cost,active_count,show_count,click_count,delay_active_count,
real_time_click,roi,active_update_time,click_update_time,origi_id,record_day) select stat_cost,active_count,show_count,click_count,delay_active_count,
real_time_click,roi,active_update_time,click_update_time,origi_id,record_day
ad_originality from ad_originality group by record_day,origi_id;
—————————– 修改 表索引;
如果原来的数据结构是2个索引,id 和 record_day,现在想要只要id索引就行(UNIQUE);-
-- 删除 ad_data ad_id重复数据,删除以record_day和ad_id重复,保留唯一不同的ad_id
-- 修改索引规则
delete from ad_data where id in (
select id from (
select id from ad_data where ad_id in (select ad_id from ad_data group by ad_id having count(ad_id)>1)
and id not in(select max(id) from ad_data group by ad_id having count(ad_id)>1)
) as tmpresult
);
-- 修改索引规则
DROP INDEX adId_date ON ad_data;
ALTER TABLE ad_data ADD UNIQUE (ad_id);
以上是关于mysql插表简单处理办法的主要内容,如果未能解决你的问题,请参考以下文章