1. 程式人生 > >mysql插表簡單處理辦法

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