规范化与性能:在(this)模式中删除链接表的好处/问题?

Lee*_*Lee 5 mysql performance

一般来说,我希望尽可能保持数据库的清洁和可扩展性.

然而,经过一些测试后,我意识到虽然这通常是最好的方法,但在处理大型数据集时,它比我所说的"脏"方法慢得多.

基本上可以说我有一个对象表.这些物品属于某些人.一个对象可能有一个人,而其他对象超过1.我最初的想法就像我一直做的那样,为我的对象创建一个对象表,为我的人创建一个人员表,然后是一个object_to_people链接表.

但是,为了获取一个人被分配到的所有对象,加入对象和链接器表可能需要3秒钟(这基于大约400k记录,但每个对象只有1个链接).是的我还设置索引等试图加快速度.

如果我改为删除人员和链接器表,并将对象表中的人员作为列,并使用1/0设置是否将每个人分配给该对象,而不加入两个大表,我看到的速度约为0.3 - > 0.7秒(变化很大).

首先,我们只需要2个人.但如果我能帮助它,我不想过于严格.我知道我可以使用缓存以及什么不能改善最终用户的时间,但是有什么理由认为使用列而不是链接表是一个非常糟糕的主意吗?

z5h*_*z5h 2

我有类似的设置。
我的连接表有 17,000,000 行。我的“person”表有 8,400,000 行,我的“objects”表有 300,000 行。

我的连接表上有多个连接的查询以及返回数万行的结果并集,并且运行时间不到 1 秒(50-400 毫秒)。

我认为您的第一个布局可能很好,但您可能需要关注索引和查询。