我有一个庞大的数据库表(单位:百万的记录)。目前,我们的应用程序是基于仅在加拿大,但现在我们正在进入其他国家,从而百万每个国家的数据将被添加。我应该每个国家创建单独的表或保持一个巨大的表?我使用CakePHP的2.x中,MySQL的5.6还会有很多读,在这个表上写操作。发行与单独的表是因为我使用的数据库操作模型(MVC),我将不得不建立每个国家不同的模型,并结合他们对报告的目的将是一团糟。在另一方面,在一个表中保持一切都将在系统上很沉重。将索引帮助在这种情况下?
常见问题;常见的回答是:不要让大量的“相同”的表。
除了极少数类型的查询不要使用PARTITION
。最常见的是滑动的时间尺度,其中“老”行需要定期删除(通过DROP PARTITION
)。 PARTITIONing
很少帮助SELECT
性能。
(A十亿行是“巨大的”,数以百万计是相当可行的。)
索引是强制性的任何不平凡的数据库表!
使用country_code CHAR(2) CHARACTER SET ascii
。这是2个字节(几乎小到1字节TINYINT
,以及更多人性化当然,这1MB一百万行;但看看另一种方式 - 它是表大小的1%左右,这可能需要约100个字节/行。
至于“索引权” - 你必须与SELECTs
开始找出需要哪些指数(ES)。
你提到的“报告”。这可能进入需要建立和维护汇总表。 (同样,让我们来看看SELECTs
。)