2013-07-04 79 views
0

我已经尝试了两种方法,但我无法决定在输入大小增加时哪一种方法会更好。MySQL体系结构优化

首先后面的故事:

我们的产品,每个产品都有一个类别路径(例如配件鞋,运动鞋)

我想我的产品,以及它们各自的类别连接,同时保持兼容的东西与3NF规则。

我可以去这两个方面,我可以:

  1. 拥有很多产品和类别之间的一对多关系(通过炸毁类路径成单独的类别和形成在许多人的关联很多表)

    优点:
    简单易懂。

    缺点:
    许多协会以指数级增长!你可以想象为什么,每个产品都有多个类别,测试用例只涉及250,000个产品。我可以直观地看到,随着输入大小的增加,数据库引擎的压力将会增加。

  2. 创建类别路径和产品之间的多对多关系,以及类别路径和实际类别之间的多对多关系。这对我来说很有意义,因为250,000个产品的测试用例中的类别路径限制为13,000个独特实例,而在另一个多对多关系中与其实际类别相关联的这些路径不超过61,000行。

    优点:
    远更少类别关联,用于通过数据库迅速(61000个协会相比,形成于第一技术900000个协会)

    缺点:
    远更内部联接。产品与类别路径相连,而类别路径又与多对多关系中的类别相关联。

您认为哪种技术更合适?我需要快速检索,因此快速选择语句应该是主要标准。

我意识到,这很大程度上取决于正确的索引,但在第一种情况下,行的大小增长至少3倍,因为在第二种情况下,存在如此多的内部连接,我担心检索速度受到负面影响。

回答

0

好的,所以我尝试了两种方法。事实证明,第二种技术要快得多。产品和类别之间的映射表不可避免地会返回比category_path和连接到产品表的类别之间的映射表多十倍的行,方法是存储每个产品的相应类别路径。

真的很简单数学。故事的道德:维护一个字典表(Category_Path)及其定义(分类)并通过外键将字典表连接到相应的项目(产品)。行数少得让大家开心:)