如何在数据库中构建大表及其事务?

时间:2018-02-02 06:38:27

标签: mysql sql database postgresql mariadb

我有两张大桌子,例如:

'tbl_items''tbl_items_transactions'

第一个表保留一些项目元数据,这些元数据可能有20个(varchar)列,包含数百万行......第二个表保留第一个表的每个事务。

例如,如果用户向tbl_items插入新记录,则会自动将新记录添加到tbl_items_transactions,并使用相同的数据加dateusername和{{1保留每一行的历史记录。

所以在上面的场景中,两个表具有相同的列,但transaction type 3 额外列tbl_items_transactionsdateusername以保留每个列transaction_type历史记录

现在假设我们有1000个用户想要使用Web应用程序插入,更新,删除tbl_items记录。所以这两个表很快就会缩放(tbl_items中可能有十亿行)

我已经尝试过MySQL,MariaDB,PostgreSQL ......它们非常好但是当表格规模和数百万行插入时,它们在tbl_items_transactions上运行一些选择查询时很慢......但有时PostgreSQL比MySQL快或MariaDB

现在我觉得我做错了...如果你是我......你是否使用MariaDB或PostgreSQL或类似的东西来构建你的数据库就像我做的那样?

1 个答案:

答案 0 :(得分:0)

您的设置错误。

您不应该复制tbl_itemstbl_items_transactions的列,而应该在后一个表中指向前者的外键。

这样就可以保留数据完整性,tbl_items_transactions会小很多。这种技术称为规范化

要在表变大时加快查询速度,请在其上定义符合WHEREJOIN条件的索引