*************************************************
** 本教程基于版本:Discuz! X 2.0 **
*************************************************
相对于Discuz!X1.5和之前的Discuz!版本,Discuz!X2.0在附件表上做了分表优化,之前单一附件表结构,如果附件非常多。对服务器的负载要求会很大,在充分考虑附件表结构优化后,Discuz!X2.0对附件表进行了预先分表,合并forum_attachmentfield表,新增forum_attachment_0~9 十个表。这十个表的中0~9的规则为对应tid的个位数字,forum_attachment表作为了附件索引表。在上传附件时,会获取当前版块、主题id,用到getattachtablebytid()函数,添加一个新的附件索引记录,并返回新附件 id。在获取附加时,会先到forum_attachment索引表中搜索相关索引,如果存在,则直接通过tableid获取相应表中的附件信息,在附件相当多的情况下,大大节约了表查询的时间,减轻服务器负载。有新附件时附件记录表先创建索引表然后获取到aid,再插入到attachment_0~9中,包括附件下载次数。附件记录表信息为:- aid '附件id',
- tid '主题id',
- pid '帖子id',
- tableid '附件表id',
- downloads '下载次数',
- PRIMARY KEY (aid),
- KEY tid (tid),
- KEY pid (pid)
复制代码 forum_attachment_0~9表各字段为:- //id
- aid '附件id',
- tid '主题id',
- pid '帖子id',
- uid '会员id',
- //基本属性
- dateline '上传时间',
- filename '原文件名',
- filesize '文件大小',
- attachment '服务器路径',
- remote '是否远程附件',
- description '说明',
- //附属属性
- readperm '阅读权限',
- price '附件价格',
- //图片属性
- isimage '是否图片',
- width '附件宽度',
- thumb '是否是缩率图',
- picid '相册图片ID ',
- //索引
- PRIMARY KEY (aid),
- KEY tid (tid),
- KEY pid (pid),
- KEY uid (uid)
- ) ENGINE=MyISAM '附件表';
复制代码 |