1

由于它的 ACID 功能,我在 INNODB 上从头开始构建了一个应用程序。但是,我遇到了一些障碍。我有一个产品表,每个产品的类别由分隔符分隔。总共有大约 1800 个独特的类别,每个产品一次与大约 3-4 个相关联。我有大约 300,000 行独特的产品。

我试着按照书本做这件事,并通过为它们创建一个单独的表并使用多对多关系将它们与我的产品相关联来规范我的类别。但是,问题是 products 表本身大约有 300,000 行,再加上大约 900,000 行的多对多类别关联表,我们有一个怪物!在两个表之间获得合理的连接速度几乎是不可能的......

在这种情况下,通过将类别以其原始格式存储在 products 表中它们自己的 TEXT 字段中,您会如何进行非规范化。要根据类别筛选这些产品,我可以使用全文搜索吗?这种方法的优缺点是什么?

顺便说一句,我在共享服务器上,所以我不能增加缓冲区大小或利用内存管理来真正利用 InnoDB

已解决 如果可以的话,我会投票支持这里所有嘲笑和嘲笑我的错误幻想的人,即按照书本行事(正常化)似乎使我失去了速度。事实上,它给了我一致性,并且在这里和那里调整了一些索引,我得到了闪电般的速度。谢谢大家。

4

1 回答 1

3

您的主题建议您正在考虑使用 MyISAM 而不是 InnoDB,但随后您的问题询问了非规范化的价值。

请参阅我对在数据库列中存储分隔列表真的那么糟糕吗?

如果您总是需要知道给定产品的类别,非规范化会有所帮助。如果您需要知道给定类别的产品,情况会更糟——否则您需要在类别表的每一行中存储一个冗余的产品列表。祝他们保持同步。

如果您有正确的索引,将 300k 表连接到 900k 表应该很容易且有效。

您应该学习使用 EXPLAIN 优化查询

于 2012-11-29T18:33:27.070 回答