I have a choice of creating three tables with identical structure but different content or one table with all of the data and one additional column that distinguishes the data. Each table will have about 10,000 rows in it, and it will be used exclusively for looking up data. The key design criteria is speed of lookup, so which is faster: three tables with 10K rows each or one table with 30K rows, or is there no substantive difference? Note: all columns that will be used as query parameters will have indices.
2 回答
就查找时间而言,任何现代 RDBMS 中的 10k 或 30k 行之间应该没有实质性差异。在任何情况下都没有足够的差异来保证去规范化。索引限定符列是此类设计的常用方法。
如果您的更新模式影响您可以放入“短”表(例如,社交网络中今天的消息)中的有限数据集,您可能会考虑进行反规范化,该表中的索引很少(er),用于快速插入/更新和有一个后台进程将稳定的更新传输到一个大的、完全索引的表。但是,如果您在写操作期间真正获胜,那将是一个戏剧性的案例,具有非常特殊和不幸的要求。RDBMS 引擎足够复杂,可以以非常有效的方式处理大多数简单场景。30k 或 rows 听起来不像是候选人。
如果仍有疑问,很容易编写测试来检查您的特定数据库/系统设置。我认为,如果您在此处使用真实数据发布您的发现,这对您的步骤中的每个人来说都是有用的信息。
除了速度问题(其他发帖人已经涵盖并且我同意)之外,您还应该考虑您在数据库中复制的业务模型,因为这可能会影响您的解决方案的维护成本。
如果 3 个“事物”有可能变成 4 个,并且您选择了单独的表格路径,那么您将不得不添加另一个表格。而如果您选择鉴别器路径,那么它就像想出一个新的鉴别器一样简单。
但是,如果您选择判别器路径,然后新要求规定“事物”之一有更多数据要存储,那么您将不得不向表中添加与其他“事物”无关的额外列。
我不能说哪条路是正确的,因为只有你知道你的商业模式。