2009-02-12 62 views
0

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

这里是我的表中的一些信息:

约500-1000记录-table -records相加,每天删除。 - 通常每天都有大约相同数量的添加和删除(活动记录的大小保持不变)

现在,我的问题是.....当我删除记录时,...我应该(A)删除记录并将其移动到新表中?或者,...我应该(B)只有和“活动”列,并且当它没有长时间活动时将记录设置为0。

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

任何投入将是巨大的,谢谢

安德鲁

回答

1

实际上,这不是一个关于数据库效率的问题,而是关于网络延迟和通过线路发送的数据量的问题。就MySQL而言,1000行或100k行将非常快,所以这不是问题。但是,如果您在这些行中获得大量数据,并且您通过AJAX将其全部传输到客户端进行过滤,则网络延迟是您的瓶颈。如果你每行发送少量字节(比如说20),并且你的表的长度约为1000条记录,那么这不是一个大问题。另一方面,如果你的表增加了(不活动的记录)到20k行,现在你发送了400k而不是20k。你的用户会注意到。如果记录较大,随着表格的增长,问题会更加严重。

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

0

这取决于你过滤/排序上的表是如何编制索引的内容。 (B)(可选择使用时间戳)并定期将它们归档到单独的表(A)(可以是整体的,也可以是基于的)第三种并非不寻常的选项,您可以采用混合方法时间戳年龄)。实际上,如果您的表格的顺序为1000行,那么可能不值得对它过分夸大(假设其他因素的可扩展性已知)。

0

如果您需要为了将来的目的而保留记录,我会设置一个无效位。

只要您在表格上有一个主键,在记录时性能应该很好。

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

3

〜1000个记录是非常小的数字。

如果一条记录可以被删除并在稍后重新添加,可能有一个“活动”指标是有意义的。

+0

+1。 1000行不算什么,即使没有适当的索引,InnoDB也会立即咀嚼它(尽管你显然应该有这些)。 – bobince 2009-02-12 03:02:01

+0

谢谢,我会记住 – Andrew 2009-02-12 05:10:16