【问题标题】:Efficient read and write in mysql databasemysql数据库中的高效读写
【发布时间】:2013-10-13 18:09:35
【问题描述】:

我有一个存储一组查询(字符串)的 mysql 表。

表格及其内容如下所示:-

query_id   queryString
  1.         Query 1
  2.         Query 2
  3.         Query 3

以某种方式与上述查询相关的结果表以所示形式存储在不同的 mysql 表中

result_id   query_id  resultString
   1.           1      Result 1
   2.           1      Result 2
   3.           2      Result 3
   4.           2      Result 4
   5.           2      Result 1
   6.           3      Result 3
   7.           3      Result 4
   8.           3      Result 5

显然,上面的模型有冗余,因为我必须多次存储 Result 1Result 3Result 4 。这种冗余随着类似查询数量的增加而进一步增加。因此,假设我必须对结果查询进行一些处理,我将不得不对多个重复值进行处理。

我能想到的另一种选择是,我可以将结果唯一地存储在一个表中,并将它们所引用的 results_id 与查询表中的查询一起存储。但在这种情况下,在读取查询结果时,我将不得不点击一些 mysql 查询,一个对应于我拥有的每个 result_id。所以,这对我来说似乎效率低下(w.r.t read)。

还有哪些其他可能的解决方案可以帮助我在读/写负载增加最小的情况下消除冗余?

如果我的疑问不清楚,请发表评论。

谢谢!

【问题讨论】:

    标签: mysql database-design database database-normalization


    【解决方案1】:

    这似乎是查询和结果字符串之间的 N:N 关系:

    您需要像您已经拥有的那样的查询字符串。 为结果字符串创建另一个表,并创建另一个表来链接查询字符串和结果字符串。不要忘记外键。

    【讨论】:

    • 但是,它们并不是唯一的。这就是我在示例中提到的。 Ex - 查询 1 和查询 2 都存在结果 1
    • 但是这两个值的组合实际上是唯一的。从关系的角度来看,您的表是可以的。
    • 是的,但无论如何我希望删除冗余,因为对它们的处理非常昂贵
    • 如果数据确实正确,我不明白你为什么要删除它
    • 您无法以其他更好的方式放置这些数据。如果信息是多余的,为什么要存储它?
    猜你喜欢
    • 2017-10-15
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    相关资源
    最近更新 更多