Mysql 如何使用其他连接表中的记录存档记录?
我有8张桌子:Mysql 如何使用其他连接表中的记录存档记录?,mysql,triggers,Mysql,Triggers,我有8张桌子: users: uid users_removed: uid messages: mid uid FK users (uid) messages_removed: mid uid comments: cid mid FK messages (mid) comments_removed: cid mid files: fid mid FK messages (mid) files_removed: fid mid 当我从表“u
users:
uid
users_removed:
uid
messages:
mid
uid FK users (uid)
messages_removed:
mid
uid
comments:
cid
mid FK messages (mid)
comments_removed:
cid
mid
files:
fid
mid FK messages (mid)
files_removed:
fid
mid
当我从表“users”中删除记录时,我希望将其移动到表users\u removed(从用户中删除之前)。我还希望将所有相应的消息(以及文件和注释)移动到*\u已删除的表中
我用过触发器:
CREATE TRIGGER delete_user BEFORE DELETE ON users
FOR EACH ROW BEGIN
INSERT IGNORE INTO users_removed
SELECT * FROM users WHERE uid = OLD.uid;
DELETE FROM messages WHERE OLD.uid in (owner_id, author_id);
END
|
CREATE TRIGGER delete_message BEFORE DELETE ON messages
FOR EACH ROW BEGIN
INSERT IGNORE INTO messages_removed
SELECT * FROM messages WHERE mid = OLD.mid;
DELETE FROM comments WHERE mid = OLD.mid;
DELETE FROM files WHERE mid = OLD.mid;
END
|
CREATE TRIGGER delete_comment BEFORE DELETE ON comments
FOR EACH ROW BEGIN
INSERT IGNORE INTO comments_removed
SELECT * FROM comments WHERE cid = OLD.cid;
END
|
CREATE TRIGGER delete_file BEFORE DELETE ON files
FOR EACH ROW BEGIN
INSERT IGNORE INTO files_removed
SELECT * FROM files WHERE fid = OLD.fid;
END
|
但对于超过5万用户、超过100万条消息、评论和文件,它的运行速度非常慢
有什么快速的方法吗
我可能会把它作为一列放在表中。我可能会把它作为一列放在表中。嗯。。。我不能使用“active”字段,因为我大量使用该表,并且添加了另一个过滤器(active=true)使其读取速度非常慢。好啊因此,假设我不希望它太快。我不用锁桌子就够了。有什么办法吗?开始/*这里有工作*/;犯罪你在用InnoDB,对吧?嗯。。。我不能使用“active”字段,因为我大量使用该表,并且添加了另一个过滤器(active=true)使其读取速度非常慢。好啊因此,假设我不希望它太快。我不用锁桌子就够了。有什么办法吗?开始/*这里有工作*/;犯罪您正在使用InnoDB,对吗?