我有一个数据库效率问题。
以下是关于我的表的一些信息:
- 约500-1000条记录 - 每天添加和删除记录。 - 通常每天添加和删除大约相同的金额(活动记录的大小保持不变)
现在,我的问题是.....当我删除记录时,...我应该(A)删除记录并将其移至新表吗?
或者......,我应该(B)只有和“活动”列,并且当它没有长时间活动时将记录设置为0.
我对使用B犹豫不决的原因是因为我的网站基于用户能够动态过滤/排序这个500-1000记录的表(使用ajax)....所以我需要它尽可能快,..(我猜一个包含更多记录的表格,过滤速度会慢一些)......我正在使用mySQL InnoDB。
任何输入都会很棒,谢谢
安德鲁
答案 0 :(得分:3)
~1000条记录是一个非常小的数字。
如果可以删除记录并在以后重新添加,可能有一个“活动”指示符。
答案 1 :(得分:1)
实际上,这不是关于数据库效率的问题,而是关于网络延迟和您通过网络发送的数据量的问题。就MySQL来说,1000行或100k行将是闪电般快速的,所以这不是问题。
但是,如果您在这些行中获得大量数据,并且您通过AJAX将其全部传输到客户端进行过滤,则网络延迟是您的瓶颈。如果你每行传输少量字节(比如说20个)而你的表长度大约保持1000条记录,那不是一个大问题。
另一方面,如果你的表(有非活动记录)增长到20k行,现在你传输400k而不是20k。您的用户会注意到。如果记录较大,则随着表的增长,问题将更加严重。
您应该在服务器端进行过滤。让MySQL花费2ms来过滤你的表,然后花一两秒钟通过Ajax发送它。
答案 2 :(得分:0)
这取决于您过滤/排序的内容以及表的索引方式。
第三种(并非罕见)选项,您可以使用混合方法来停用记录(B)(可选择带时间戳)并定期将它们存档到单独的表(A)中(或者集中或基于时间戳年龄)。
实际上,如果你的表在1000行的顺序,那么它可能不值得过多(假设其他因素的可扩展性已知)。
答案 3 :(得分:0)
如果您需要保留记录以供将来使用,我会设置一个非活动位。
只要您在桌面上有主键,SELECT
记录时性能就会非常出色。
此外,如果您在客户端进行过滤/排序,那么只需要检索一次记录。