2011-03-05 32 views
0

我有一个MySQL数据库,用于存储从远程用户接收到的更新数据包。每五到十次更新,一些额外的代码运行就会创建实质上是一个集体更新数据包。这种方法允许用户获取应用程序的最新信息,而不必从更新包零重新生成状态。在高度活跃的MySQL数据库中重置标识

我明白,重新使用数据库索引通常是不好的做法,因为最终会破坏关系引用。在我的情况下,没有涉及我的更新数据包数据的辅助表。索引仅由客户端应用程序使用,以确定哪些更新尚未处理。经过几个月的典型使用后,由于访问集体更新数据包,我的自动增量索引无疑会变得非常大,远远超出必要值。那么,在我的具体情况下,在生成一个集体更新数据包之后重置索引是否合理并且是首选?

我没有大量的数据库经验,所以我可能会忽视这里的一种技术 - 如果是这样的话,请指出我的正确方向。谢谢!

回答

2

我发现这个问题有点令人困惑,直到我意识到您使用的术语“索引”指的是我们通常所说的“标识符”。

是的,通常认为重复使用主键值是不好的做法。 (理想情况下,主键值是简单的,唯一的,不可变的和匿名的。)

你在说什么是你在表上有一个AUTO_INCREMENT列,并且你在表中插入了很多行,而这个值不用作表格中的PRIMARY KEY。 (由于没有引用表的外键,所以表不必定义PRIMARY KEY。)

我只想使用BIGINT UNSIGNED的数据类型,这会使我的数量级为10 ** 19个可能的值。

我看不到我需要重置AUTO_INCREMENT值。在任何情况下,都不可能将其重置为低于存储的最高值,因此将其设置得较低需要从表格中移除行。

+0

我对使用不正确的术语表示歉意。我担心的是,我不希望对这个数据库进行维护,因为它应该可以自动化所有更新。我在概念上将我的实现视为一个堆栈,当达到10的高度时,数据包将被折叠为单个更新。我在技术上只需要一张表来存储10次更新,因为堆栈的底部将包含以前所有内容的更新。我应该每10次更新一次重新创建表格吗? – Xenethyl 2011-03-05 23:27:35

1

具有非常高编号的自动递增ID在实践中不应引起问题。如果您使用bigint,几十年可以创建每秒1000次,而不会耗尽。

+0

感谢您确认使用大量身份证确实可以。我有点偏离这条路线,因为我认为存储bigint的额外开销是不可取的。在实践中,我猜这不是很糟糕? – Xenethyl 2011-03-06 07:51:00