无论如何,我不是DBA,但我对数据库光学化的一些基本原则有基本的理解。
目前,我们有一个记录会话数据的表,它每月写入大约120万行。在每个月的开始,我们将上个月的行分开,并将它们移动到一个名为"tbl_session_mm_yyyy“的表中。我们希望开始查询活动表和旧表,并提取上一次登录之类的详细信息(简单的sql查询,从tbl_live中选择maxdate,其中accountid = 123,union,从tbl_old等)。
现在,我认为我们的数据库结构的设计不太适合这一点。因此,我们每年有12张桌子,每年,我们都要继续建立庞大的工会来获得所有这些表格。因此,最好这样做:
tbl_sessions:-这是一直被写入的活动表,是用户is、帐户之类的索引。这将永远只包含当前月份的记录。
tbl_old_sessions:-这将取代月表,成为一个包含所有前几个月记录的巨大表。按月进行分区(在now()之前填充的datefield上),并在accountid、userid等上进行索引
这个设计比我以前的月表更有意义吗?如果我在实际日期之前很少进行查询,那么我应该担心tbl_old_sessions的分区吗?
发布于 2012-10-19 16:17:09
您的新设计将使跨所有表的查询变得更容易,而无需知道在编写查询时合并哪些表。
我不确定您是否需要担心分区方面。这听起来不错,但我从来没有用过这样的比例(不是在MySQL中)。
如果您担心分区,您可以继续使用当前的解决方案,但是不需要为每个year+month创建一个新表,而是有12个表,每个月一个表,用于所有年份。至少你们的工会是固定不变的。
https://dba.stackexchange.com/questions/27241
复制相似问题