如何正确清理一张桌子

时间:2012-04-22 10:53:13

标签: mysql

为了确定某个对象的使用频率,我使用了包含以下字段的表格;

id - objectID - timestamp

每次使用一个对象时,都会添加它的ID和time()。这样我就可以确定对象在最后一小时/分钟/秒等中的使用频率等。

一小时后,这行没用(我上面一小时没检查)。但是,我的理解是简单地删除行是不明智的,因为它可能会弄乱主键(auto_increment ID)。

所以我添加了一个名为“active”的字段。在检查对象的使用频率之前,我遍历所有WHERE active=1并在超过1小时后将其设置为0。我不认为这会在多个用户之间产生任何并发问题,但这给我留下了大量未使用的数据。

现在我想也许最好在插入新的使用数据之前检查是否有一个带active=0的字段,然后再插入一个新行,用新数据更新一个,并再次将活动设置为1。但是,这将需要表锁定以防止多个客户端更新同一行。

有人可以对此有所了解吗?

2 个答案:

答案 0 :(得分:2)

我从来没有听说过删除行会弄乱主键。

您是否可能尝试确保id自动分配的auto_increment值与另一个表的值匹配?这不是必需的 - 您只需使用INTEGER PRIMARY KEY作为id列并明确指定值。

答案 1 :(得分:1)

您可以执行与所有超过1小时的行匹配的更新查询。

UPDATE table SET active=0 WHERE timestamp < now() - interval 1 hour