5+ 列主键对大型(1 亿+)表有害吗?

Jef*_*fLL 12 mysql database-design primary-key

我正在阅读一些现实生活中的数据库问题,一个项目有一个 1 亿行多的表,其中有 5 列作为其主要内容。我认为这很糟糕,但谁能告诉我究竟是为什么?

该表是一种微型汇总/聚合表,因此 5 列类似于(day、market_id、product_id...)。起初我认为一个 5 列的主键并不理想,但我越想,我真的想不出一个很好的理由为什么它很糟糕。

这是与一半的公司工程师进行的深夜讨论。刚刚有人提到这是一个糟糕的设计,一位高级工程师表示同意,但没有人真正了解原因。因此试图为自己研究这件事!

Wal*_*tty 9

非常复杂的主键存在性能问题。并且它可能无法像更简单的主键那样防止重复。

但是,有一种设计模式经常生成带有由六个左右组件组成的主键的表。它是星型模式事实表。如果星型模式的事实表有六个维度,那么主键将有六个组件。我从未见过没有声明主键的事实表,我认为这是值得的开销,即使 ETL 过程仍然必须非常仔细地编写。

一些报告数据库模仿星型模式的模式,即使它没有明确设计成那样。

1亿+行对于一个事实表来说不算太大,尤其是在今天的大数据下。