gpt4 book ai didi

mysql - 执行 JOIN 时 MySQL 表大小是否重要?

转载 作者:可可西里 更新时间:2023-11-01 08:09:34 26 4
gpt4 key购买 nike

我目前正在尝试设计一个高性能数据库来跟踪点击,然后显示对这些点击的分析。

我预计每 2 周至少会有 1000 万次点击。

有几个变量(每个变量都需要一个唯一的列)我将允许人们在使用点击跟踪时使用它们 - 但我不想将它们限制为 5 个或所以。这就是我考虑创建表 B 的原因,我可以在其中存储每次点击的这些变量。

然而,每次点击可能有 5-15 个以上的变量,具体取决于他们使用的变量数量。如果我将它们存储在一个单独的表中,该表将乘以 10M/2 周乘以用户可能使用的变量。

为了显示变量的分析,我需要连接表。

同时考虑写入性能和最重要的读取性能,如果我将一个 100M 行的表加入到:

  • 500 行表还是 100M 行表?

有人建议对其进行非规范化,例如拥有 20 列并在未使用时存储 NULL 值吗?

最佳答案

如果我将一个 100M 行的表连接到...,有什么不同吗

是的。 JOIN 的性能仅取决于根据您的 ON 条件查找匹配行所需的时间。这意味着增加连接表的行大小将增加 JOIN 时间,因为要筛选更多行以进行匹配。通常,可以将 JOIN 视为花费 A*B 时间,其中 A 是第一个表中的行数,B 是第二个表中的行数。这是一个非常广泛的陈述,因为优化器可能会采用许多优化策略来更改此值,但这可以被认为是一般规则。

为了提高 JOIN 的效率,特别是对于读取,您应该查看 indexing .索引允许您标记优化器应该索引的列,或者保持运行跟踪以允许更快地评估值。这会增加任何写入操作,因为数据需要修改包含的数据结构(通常是 B 树),但会减少读取操作的时间,因为数据已在此数据结构中预先排序,以便快速查找。

有人建议对其进行反规范化,例如拥有 20 列并在未使用时存储 NULL 值吗?

这里有很多因素可以决定是或否。主要是,存储空间是否会成为一个问题,以及出现重复数据的可能性有多大。如果答案是存储空间不是问题并且不太可能出现重复项,那么一张大表可能是正确的决定。如果您的存储空间有限,那么存储多余的空值可能并不明智。如果您有很多重复值,那么一个大表可能比 JOIN 效率低。

反规范化时要考虑的另一个因素是,如果另一个表想要访问前两个表中的一个值。如果是,那么在非规范化之后获取这些值的 JOIN 将比将两个表分开效率更低。这个问题确实是您在设计数据库并查看其使用方式时需要自己处理的问题。

关于mysql - 执行 JOIN 时 MySQL 表大小是否重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45190069/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com