0

我有一个数据库效率问题。

这是关于我的桌子的一些信息:

- 大约 500-1000 条记录的表 - 每天添加和删除记录。- 通常每天添加和删除的数量大致相同(活动记录的大小保持不变)

现在,我的问题是......当我删除记录时,......我应该(A)删除记录并将其移动到新表吗?

或者,...我 (B) 是否应该只有“活动”列并在不再活动时将记录设置为 0。

我犹豫使用 B 的原因是因为我的网站基于用户能够动态过滤/排序 500-1000 条记录的表(使用 ajax)......所以我需要它尽可能快可能,..(我猜一个有更多记录的表过滤起来会更慢)...我正在使用 mySQL InnoDB。

任何输入都会很棒,谢谢

安德鲁

4

4 回答 4

3

约 1000 条记录是一个非常小的数字。

如果可以在以后删除并重新添加记录,那么拥有一个“活动”指示器可能是有意义的。

于 2009-02-12T01:27:40.187 回答
1

实际上,这不是关于数据库效率的问题,而是关于网络延迟和您通过网络发送的数据量的问题。就 MySQL 而言,1000 行或 100k 行将是闪电般的速度,所以这不是问题。

但是,如果您在这些行中有大量数据,并且您通过 AJAX 将其全部传输到客户端进行过滤,那么网络延迟就是您的瓶颈。如果您每行传输少量字节(例如 20 个)并且您的表的长度保持在 1000 条左右,这不是什么大问题。

另一方面,如果您的表(包含非活动记录)增长到 20k 行,那么现在您传输的是 400k 而不是 20k。您的用户会注意到。如果记录更大,随着表的增长,问题会更加严重。

你真的应该在服务器端进行过滤。让 MySQL 花 2ms 过滤您的表,然后再花一两秒钟通过 Ajax 发送它。

于 2009-02-12T01:44:57.557 回答
0

这取决于您过滤/排序的内容以及表的索引方式。

第三个并且不常见的选项,您可以采用混合方法,在该方法中停用记录 (B)(可选地使用时间戳)并定期将它们归档到单独的表 (A)(整体或基于时间戳年龄) .

实际上,如果您的表大约有 1000 行,则可能不值得为此大惊小怪(假设其他因素的可伸缩性已知)。

于 2009-02-12T01:25:54.590 回答
0

如果您需要为将来的目的保留记录,我会设置一个非活动位。

只要您在表上有一个主键,在SELECT读取记录时性能应该非常好。

此外,如果您在客户端进行过滤/排序,则只需检索一次记录。

于 2009-02-12T01:26:07.587 回答