mysql插表簡單處理辦法
阿新 • • 發佈:2019-02-13
最近由於原先的單表資料項太多,決定拆成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);