数据库 分享下用户表主表与存档表合并的方法

[复制链接]
建站高手 发表于 2015-10-8 17:23:15 [数据库] 显示全部楼层 |阅读模式 上一主题 下一主题

马上注册,一起探讨正确快速的建站方法

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
主要解决大家用户表优化后,主表和存档表数据重复的问题。并且删除存档表。

1、首先在后台计划任务关闭每日用户表优化。
2、操作数据库,我也只是看的教程,下面是我的论坛操作的步骤
下面例子主表为pre_common_member,存档表为pre_common_member_archive,临时表1为temp_triven,临时表2为pre_common_member_t

select count(*) from pre_common_member_archive;

创建存档表索引
create index ind_b2kw_c1 on  pre_common_member_archive(uid);

创建临时表1(将临时表2数据复制到临时表1)(临时表2为复制的主表,保留结构清空数据)
create table temp_triven  select * from pre_common_member_t where 1=2;

主表数据放入临时表1
insert into temp_triven  select * from pre_common_member;

存档表数据放入临时表1
insert into temp_triven  select * from pre_common_member_archive;

select count(*) from temp_triven;

创建临时表1索引
create index ind_temp_c123 on temp_triven(uid,email,username);

更改索引数据,去掉重复数据
explain select uid,email,username,max(if_robot) from temp_triven FORCE INDEX (ind_temp_c123) group by uid,email,username ;

将最终数据写入临时表2
insert into pre_common_member_t select uid,email,username,max(if_robot) from temp_triven FORCE INDEX (ind_temp_c123) group by uid,email,username ;

删除临时表1
drop table temp_triven;


create index ind_c2kw_c1 on pre_common_member_t(uid);

create index ind_c2kw_c2 on pre_common_member_t(email);

create index ind_c2kw_c3 on pre_common_member_t(username);

清空主表数据
truncate table pre_common_member;

情况存档表数据
truncate table pre_common_member_archive;

3、将临时表2名称修改为pre_common_member


以防万一,修改前备份数据库!!!关站操作!

xiaoyuwxz说表是从主表分出来的,UID跟用户名是不会重复的,可以直接使用replace更新,这样来得更为简单





上一篇:开启通过邮件发送注册链接后Discuz x3.2手机版无法注册的解决方法
下一篇:Discuz! X3.1/3.2 开启https(SSL)的方法

大神点评2

Skyfree 发表于 2015-10-8 17:57:20 [数据库] 显示全部楼层
用户表优化貌似就是将主表中不经常访问的、被禁言以及等等用户放到存档表里面,可以减少主表用户遍历相关操作给数据库带来的压力,何故要合并?
luccccc17 发表于 2015-10-9 23:21:13 [数据库] 显示全部楼层
很给力,希望分享更多给力的帖子啊。
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

快速回复 返回顶部 返回列表