arctiny 是什么?
arctiny 是 “Article Tiny” 的缩写,中文可以理解为 “文章精简表” 或 “文章摘要表”。

它不是一个独立的文件,而是 Dedecms 数据库中的一张核心数据表,表名通常为 dede_arctiny(dede_ 是默认的前缀,可能因安装时设置而不同)。
核心定位: 这张表是 文章数据的“索引”或“元数据”表,它不存储文章的完整内容,而是存储了每篇文章最关键、最精简的信息,用于快速检索和显示。
dede_arctiny 表的主要字段
这张表的结构非常精简,但每个字段都有其特定用途,以下是它的主要字段及其说明:
| 字段名 | 数据类型 | 说明 |
|---|---|---|
| id | mediumint(8) unsigned | 主键,自增ID,每篇文章的唯一标识符。 |
| typeid | smallint(5) unsigned | 栏目ID,文章所属的栏目。 |
| typeid2 | smallint(5) unsigned | 副栏目ID,支持文章同时属于多个栏目。 |
| arcrank | tinyint(1) unsigned | 文档状态。-1为待审核,0为正常,1为推荐/特殊文档,2为普通文档,4为草稿。 |
| channel | smallint(5) unsigned | 频道类型,标识文章属于哪个频道(如普通文章、图集、软件等),对应 dede_arctype 表。 |
| senddate | int(10) unsigned | 发布时间(时间戳),文章提交或发布的时间。 |
| sortrank | int(10) unsigned | 文章排序权重,数字越大,排序越靠前,常用于首页、列表页的排序。 |
| mid | smallint(8) unsigned | 会员ID,发布文章的会员/管理员ID。 |
| click | int(10) unsigned | 点击次数,记录文章的点击量。 |
| ismake | smallint(6) | 是否生成静态HTML。1为已生成,0为未生成。 |
| money | smallint(5) unsigned | 售价,用于付费文档。 |
| filename | varchar(120) | 文件名,生成静态文件时的文件名,如 html。 |
| dutyadmin | varchar(30) | 责任编辑,负责该文章编辑的管理员用户名。 |
| description | varchar(255) | 文章摘要,文章的简短描述,常用于列表页和搜索引擎摘要。 |
| keywords | varchar(255) | ,文章的关键词,用于SEO和标签云。 |
| templet | varchar(60) | 自定义模板,可以为单篇文章指定独立的模板文件。 |
| adminid` | smallint(5) unsigned | 管理员ID,最后修改该文章的管理员ID。 |
| mtype` | smallint(1) | 自定义分类,用于扩展文章分类。 |
weight` | smallint(5) unsigned | 权重,与 sortrank 类似,用于更灵活的排序。 |
arctiny 的核心作用与工作原理
理解 arctiny 的作用,就理解了 Dedecms 性能优化的一个关键点。

1 作用一:作为高速索引,提升性能
想象一下,如果你的首页要显示10篇文章,如果每次都去查询包含几万甚至几十万字符的 dede_addonarticle (文章正文表),数据库压力会非常大,页面加载也会非常慢。
arctiny 表只存储了文章的ID、标题、点击数等几十个字节的核心信息,当 Dedecms 需要生成首页、列表页时,它会:
- 先查询
dede_arctiny表:根据栏目ID、排序规则等条件,快速筛选出符合要求的文章ID列表,这个查询非常快,因为数据量小且字段少。 - 再根据ID去关联查询其他表:
- 如果只需要显示标题和摘要,可能直接从
arctiny表里就拿到了。 - 如果需要显示正文,则用这些ID去
dede_addonarticle表里查询具体内容。 - 如果需要显示栏目信息,则用
typeid去栏目表dede_arctype里查询。
- 如果只需要显示标题和摘要,可能直接从
一句话总结:arctiny 就像一个图书馆的“图书索引卡片”,你先通过卡片快速找到书的编号,然后再去书架上找到那本厚厚的书。
2 作用二:统一数据入口,简化逻辑
Dedecms 的文章数据分布在多个表中:

dede_archives: 存放文章的通用信息(标题、作者、发布时间等)。dede_arctiny: 存放精简的索引信息。dede_addonarticle: 存放文章的正文内容(如果是普通文章)。dede_arcclick: 存放点击记录。dede_taglist: 存放标签关联。
arctiny 表通过 id 这个主键,将这些分散的表紧密地联系在一起,这使得系统在处理文章时,逻辑更加清晰和统一。
arctiny 与其他核心表的关系
| 表名 | 全称/说明 | 与 arctiny 的关系 |
|---|---|---|
dede_archives |
文章主表 | 一对一关系。arctiny.id 对应 archives.id。archives 存放比 arctiny 更全但非正文的通用信息。 |
dede_addonarticle |
文章附加表(正文) | 一对一关系。arctiny.id 对应 aid,存放文章的详细内容,如 body 字段。 |
dede_arctype |
栏目表 | 一对多关系。arctiny.typeid 对应 arctype.id,一个栏目下可以有无数篇文章。 |
dede_taglist |
标签表 | 多对多关系,通过 arctiny.id 来建立文章与标签的关联。 |
实际应用场景与开发建议
1 在模板中调用
虽然模板标签如 {dede:arclist} 最终会生成复杂的SQL查询,但它的底层逻辑就是基于 arctiny 表来获取文章列表的。
{dede:arclist typeid='1' row='10' titlelen='30'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:description function='cn_substr(@me,80)'/]...</span>
</li>
{/dede:arclist}
[field:title/],可能来自archives表。[field:description/]:直接来自arctiny.description字段。[field:arcurl/]:链接,根据arctiny.id和arctiny.filename生成。
2 在二次开发中(PHP)
如果你需要写一个自定义的PHP文件来获取文章列表,最佳实践是模仿Dede的核心逻辑,优先使用 arctiny 表。
// 伪代码示例
// 1. 连接数据库
$db = new DbConnector();
// 2. 从 arctiny 表中查询文章ID和基本信息
$sql = "SELECT id, typeid, title, description, senddate FROM dede_arctiny
WHERE typeid IN (1, 2) AND arcrank = 0
ORDER BY sortrank DESC
LIMIT 10";
$result = $db->query($sql);
$articles = [];
while ($row = $db->fetchArray($result)) {
// 3. 根据ID去其他表获取更多信息(如正文)
// $article_body = getArticleBodyById($row['id']);
$articles[] = $row;
}
// 4. 输出或处理 $articles 数组
print_r($articles);
3 常见问题排查
-
为什么新发布的文章在首页/列表页不显示?
- 检查
dede_arctiny表中该文章的arcrank字段是否为0(正常状态),如果为-1,说明文章待审核。 - 检查
ismake字段是否为1,虽然动态页面不受此影响,但静态生成会。 - 检查
typeid是否正确。
- 检查
-
为什么点击数不增加?
- 检查
dede_arctiny表中该文章的click字段,以及点击记录表dede_arcclick是否有对应记录。
- 检查
-
网站更新/生成后,内容还是旧的?
- 这通常是因为
dede_arctiny表中的数据没有正确更新,可以尝试在后台“更新系统缓存”或“一键更新网站”来修复数据一致性。
- 这通常是因为
arctiny 是 Dedecms 的 “数据心脏” 和 “性能加速器”,它通过精简的数据结构,为整个系统提供了快速、高效的索引服务,理解了 arctiny,你就能更深刻地理解 Dedecms 的数据流转机制,无论是进行模板开发、二次编程还是日常的网站维护,都会得心应手。
