2017-10-31 1 views
-2

우리는 MySQL 데이터베이스 데이터베이스, 판매 및 구매 제품을 보유하고 있습니다. 지난 3 년 동안 로그인하지 않은 비활성 사용자를 우리 웹 사이트에서 구입하거나 팔지 않은 사용자는 다른 테이블로 이동해야합니다. 각 테이블에는 수백만 개의 항목이 있습니다.MySQL은 조건에 따라 한 테이블에서 다른 테이블로 행을 이동합니다.

판매 된 품목을위한 테이블입니다. 약 40m 항목;

CREATE TABLE `sold` (
    `id` int(10) NOT NULL AUTO_INCREMENT, 
    `uid` int(10) unsigned NOT NULL, 
    `item` bigint(20) DEFAULT '0', 
    PRIMARY KEY (`id`), 
    KEY `uid` (`uid`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

구매 품목 표입니다. 약 6m 항목;

CREATE TABLE `purchased` (
    `id` int(10) NOT NULL AUTO_INCREMENT, 
    `uid` int(10) unsigned NOT NULL, 
    `item` bigint(20) DEFAULT '0', 
    PRIMARY KEY (`id`), 
    KEY `uid` (`uid`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

이것은 약 17m 항목의 사용자 테이블입니다.

CREATE TABLE `users` (
    `uid` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `name` varchar(32) DEFAULT '', 
    `email` varchar(64) DEFAULT NULL, 
    `lastlogin` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    PRIMARY KEY (`uid`), 
    UNIQUE KEY `email_index` (`email`), 
    KEY `lastlogin` (`lastlogin`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

이것은 우리가

CREATE TABLE `inactiveusers` (
    `uid` int(10) unsigned NOT NULL, 
    `name` varchar(32) DEFAULT '', 
    `email` varchar(64) DEFAULT NULL, 
    `lastlogin` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    PRIMARY KEY (`uid`), 
    UNIQUE KEY `email_index` (`email`), 
    KEY `lastlogin` (`lastlogin`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

에 최소한의 다운 타임이를 달성하는 방법에 대한 어떤 제안을 비활성 사용자를 이동해야하는 테이블은?

답변

0

@ 유모지, 귀하의 문제는 지난 3 년간 3 년간의 활동을 계산하는 방법입니다. 권리?

그렇다면 DB 테이블에 "created_at"열을 추가해야합니다.

이제 테이블에 created_at 열을 추가하면 지난 3 년간의 활동을 쉽게 계산할 수 있습니다.

INSERT INTO inactiveusers select * from users where uid = 'the user ids u get'; 
DELETE FROM users where uid = 'the user ids u get'; 

내가이 문제를 해결 희망 - 은 여기 그런 다음 당신은 사용자 ID를 얻을이 쿼리에서

SELECT uid FROM sold AND purchased WHERE sold.created_at>DATE_SUB(NOW(), INTERVAL 3 YEAR) OR purchased.created_at>DATE_SUB(NOW(), INTERVAL 3 YEAR); 

을 인걸요. 건배.

관련 문제