首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySql表结构

MySql表结构
EN

Stack Overflow用户
提问于 2010-08-06 20:10:04
回答 2查看 137关注 0票数 1

目前,我在mysql中有一个记录事务的表。这些事务可能会由用户更新-有时从不更新,有时经常更新。但是,我需要跟踪此表中每个字段的更改。所以,我现在在表中有一个名为' is_deleted‘的TINYINT(1)字段,当用户’更新‘一个事务时,它只是将旧记录的is_deleted字段更新为1,并插入一个全新的记录。

这一切都运行得很好,因为我只需运行以下sql语句来获取所有当前记录:

代码语言:javascript
复制
SELECT id, foo, bar, something FROM trans WHERE is_deleted = 0;

但是,我担心这个表会随着时间的推移变得不必要地变大,因此我正在考虑实际删除旧记录并将其‘存档’到另一个表(trans_deleted)中。这意味着trans表将只包含“实时”记录,因此使得SELECT查询速度更快一些。

然而,这确实意味着更新记录将花费更长的时间,因为它将运行3个查询: 1.插入trans_deleted旧记录;2.从trans WHERE WHERE=5删除;3.插入trans新记录

因此,更新记录需要更多的工作,但读取速度会更快。

对此有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2010-08-06 20:16:13

我建议使用table trans和table_revision

其中trans具有字段id和current_revision,而revision具有字段id、transid、foo和bar。

要获取所有当前项,请执行以下操作:

代码语言:javascript
复制
SELECT r.foo, r.bar FROM trans AS t
  LEFT JOIN revision AS r ON t.id = r.trans_id
  WHERE t.current_revision = r.id

如果你现在把索引放在r.id和r.trans_id上,存档不会让你的速度变得更快。

票数 1
EN

Stack Overflow用户

发布于 2010-08-06 20:16:48

通常,你读的比写的要多得多(而且你还说有些记录可能永远不会改变)。因此,这是使用归档表的一个原因。

还有另一个问题:您还必须考虑程序员的时间,而不仅仅是处理器的时间:)如果您将存档的行与活动的行放在同一个表中,那么在对该表执行的每个查询中,您都必须记住并注意这一点。更不用说未来的程序员,他们可能不得不处理表...我会推荐仅基于此因素的归档方法,即使没有任何速度改进!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3423595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档