Jar*_*ede 5 mysql index database-design partitioning
我无论如何都不是DBA,但我对数据库优化的一些基本原理有基本的了解。
目前我们有一个记录会话数据的表,它每月写入大约 120 万行。在每个月初,我们将上个月的行分开,并将它们移动到名为“ tbl_session_mm_yyyy ”的表中。我们要开始查询实时表和旧表并提取上次登录等详细信息(简单的 sql 查询,从 tbl_live 中选择 maxdate,其中 accountid = 123 union select 等来自 tbl_old 等)。
现在我在想我们的数据库结构的设计不太适合这个。因此,如果我们每年有 12 张桌子,我们将不得不继续建立庞大的工会来获得所有这些桌子。因此,这样做会更好:
tbl_sessions: -这是被写入所有的时间活动表,索引,例如关于用户ID,ACCOUNTID。这将只包含当前月份的记录。
tbl_old_sessions : - 这将取代月表,成为一个包含所有前几个月记录的巨型表。进行分配的一个月(由NOW()人口将DateField)和索引的ACCOUNTID,用户ID等
这种设计是否比我之前的月度表更有意义?如果按实际日期进行的查询很少,我是否应该担心对 tbl_old_sessions 进行分区?
您的新设计将使跨所有表的查询变得更加容易,而无需在编写查询时知道要合并哪些表。
我不确定您是否需要担心分区方面。听起来不错,但我从来没有在这种规模上使用过类似的东西(不是在 MySQL 中)。
如果您担心分区,您可以继续使用当前的解决方案,但不是每年+每月一个新表,而是所有年份都有 12 个表,每个月一个。至少你的工会会保持不变。