我有一个巨大的数据库表(数百万条记录)。目前,我们的应用程序仅位于加拿大,但现在我们正在进入其他国家/地区,因此将在每个国家/地区添加数百万个数据。我应该为每个国家/地区创建单独的表格还是保留一张大表格? 我正在使用Cakephp 2.x,mysql 5.6 此表上将有许多读取和写入操作。 单独表的问题在于,由于我使用模型(MVC)进行数据库操作,因此我将不得不为每个国家/地区创建单独的模型,并且出于报告目的将它们组合起来会很麻烦。 另一方面,将所有内容都放在一个表中将对系统造成很大的负担。在这种情况下,索引编制会有所帮助吗?
答案 0 :(得分:1)
常见问题;常见答案:不要制作很多“相同”的表。
除极少数类型的查询外,请勿使用PARTITION
。最常见的是滑动时间标度,其中需要定期删除“旧”行(通过DROP PARTITION
)。 PARTITIONing
很少会提高SELECT
的性能。
(十亿行是“巨大的”;数百万行是相当可行的。)
对于任何非平凡的数据库表,索引都是强制性的!
使用country_code CHAR(2) CHARACTER SET ascii
。那是2个字节(几乎只有1个字节的TINYINT
,而且对人类更友好。当然,这1MB代表一百万行;但是换个角度来看,它大约是大小的1%表的数据,可能需要约100个字节/行。
关于“正确索引” –您必须 从SELECTs
开始,以确定需要哪些索引。
您提到了“报告”。可能需要建立和维护摘要表。 (再次,我们来看看SELECTs
。)