由于它的ACID功能,我从头开始在INNODB上构建了一个应用程序。但是,我遇到了一些障碍。我有一个产品表,每个产品的类别用分隔符分隔。总共有大约1800个独特的类别,每个产品一次约有3-4个。我有大约300,000行独特的产品。
我尝试通过本书做到这一点,并通过为他们创建一个单独的表并使用多对多关系将它们与我的产品相关联来规范化我的类别。然而,问题是产品表本身大约有300,000行,并且添加了多个类别的关联表,大约有900,000行,我们有一个怪物!几乎不可能在两个表之间获得合理的连接速度....
在这种情况下,通过将类别以原始格式存储在products表中自己的TEXT字段中,您会做出什么样的非规范化处理?要根据类别筛选这些产品,我可以使用fulltextsearch吗? 这种方法的优点和缺点是什么?
顺便说一下,我在共享服务器上,所以我无法增加缓冲区大小或利用内存管理来真正使用InnoDB
解决了 如果可以的话,我会在这里向所有人嗤之以鼻,他们嘲笑和嘲笑我对这本书(正常化)的错误看法似乎让我付出了代价。事实上,它给了我一致性,并在这里和那里调整了一些索引,我得到了闪电般的速度。谢谢大家。
答案 0 :(得分:3)
您的主题建议您正在考虑使用MyISAM而不是InnoDB,但随后您的问题会询问非规范化的价值。
请参阅我对Is storing a delimited list in a database column really that bad?
的回答如果您始终需要了解给定产品的类别,则非规范化可能会有所帮助。如果您需要知道给定类别的产品,情况会更糟 - 或者您需要在类别表的每一行中存储冗余的产品列表。祝他们保持同步,祝你好运。
将300k表连接到900k表应该简单有效,如果你有正确的索引。