大型数据库表的设计技巧

时间:2019-02-05 14:23:57

标签: mysql cakephp database-design orm

我有一个巨大的数据库表(数百万条记录)。目前,我们的应用程序仅位于加拿大,但现在我们正在进入其他国家/地区,因此将在每个国家/地区添加数百万个数据。我应该为每个国家/地区创建单独的表格还是保留一张大表格? 我正在使用Cakephp 2.x,mysql 5.6 此表上将有许多读取和写入操作。 单独表的问题在于,由于我使用模型(MVC)进行数据库操作,因此我将不得不为每个国家/地区创建单独的模型,并且出于报告目的将它们组合起来会很麻烦。 另一方面,将所有内容都放在一个表中将对系统造成很大的负担。在这种情况下,索引编制会有所帮助吗?

1 个答案:

答案 0 :(得分:1)

常见问题;常见答案:不要制作很多“相同”的表。

除极少数类型的查询外,请勿使用PARTITION。最常见的是滑动时间标度,其中需要定期删除“旧”行(通过DROP PARTITION)。 PARTITIONing很少会提高SELECT的性能。

(十亿行是“巨大的”;数百万行是相当可行的。)

对于任何非平凡的数据库表,

索引都是强制性的!

使用country_code CHAR(2) CHARACTER SET ascii。那是2个字节(几乎只有1个字节的TINYINT,而且对人类更友好。当然,这1MB代表一百万行;但是换个角度来看,它大约是大小的1%表的数据,可能需要约100个字节/行。

关于“正确索引” –您必须 SELECTs开始,以确定需要哪些索引。

您提到了“报告”。可能需要建立和维护摘要表。 (再次,我们来看看SELECTs。)