【问题标题】:Does mysql optimize result table to avoid duplicate valuesmysql是否优化结果表以避免重复值
【发布时间】:2021-10-21 14:33:58
【问题描述】:

在 JOIN 的情况下,尤其是在一对多关系中,结果集通常会在结果中包含大量重复信息。

例如,

TABLE_A_ID TABLE_A_FIELD_ONE TABLE_A_FIELD_TWO TABLE_B_ID TABLE_B_FOREIGN_KEY TABLE_B_FIELD_ONE
12 MARK POLIO 41 12 SHOE
12 MARK POLIO 42 12 SHIRT
12 MARK POLIO 43 12 BOOT
12 MARK POLIO 44 12 HAT
12 MARK POLIO 45 12 GLOVE

如您所见,12MARKPOLIO 连续发送了六次。在我的实际情况中,我注意到我连续发送了数千次相同的数据,通过线路从 db 到应用服务器发送的数据量超过 20 倍,内存也增加了 20 倍。

我正要开始优化其中的 ****,但后来我意识到 mysql 驱动程序很可能已经对此进行了优化,例如只发送表 b 列和表 a 列用于何时TABLE_B_FOREIGN_KEY 变化。

确实以这种或另一种方式进行了优化,还是我应该停止使用连接并改为往返数据库?

【问题讨论】:

  • 如你所见,12, MARK, POLIO 被发送了 6 次 其实是 5 次 :)
  • mysql 驱动程序可能已经对此进行了优化不,根据您编写的查询结果是正确的
  • 或者我应该停止使用连接,而是进行往返绝对不是,往返比将一些额外数据向上移动更糟糕
  • 结果是正确的,但是我们说的是优化,不是正确性。
  • 好的,那么您究竟是如何考虑要优化这个的

标签: mysql resultset mysql-connector database-optimization


【解决方案1】:

当重复项位于单个表中时,请考虑将 UNIQUE (col) 添加到该表中。这会基于col 强制唯一性(在插入时)。如果唯一性由列组合确定,则为UNIQUE(col1, col2, ...)

您更有可能需要DISTINCT 来删除整行。

SELECT DISTINCT col1, col2, ...
    FROM ...
    JOIN ... ON ...

但在某些情况下,应该以其他方式进行重复数据删除。让我们看看你的SELECT。 (我在想GROUP BY 或“派生表”。)

【讨论】:

  • 我需要得到的列有欺骗性,我只是希望它通过网络发送更少的数据并占用更少的内存。
猜你喜欢
  • 1970-01-01
  • 2015-08-09
  • 1970-01-01
  • 2016-07-06
  • 2012-03-17
  • 2014-04-24
  • 1970-01-01
  • 2018-08-20
  • 2014-07-17
相关资源
最近更新 更多