我目前正在尝试设计一个高性能数据库来跟踪点击次数,然后显示这些点击次数的分析结果。在进行JOIN时,MySQL表的大小是否重要?
我预计每两周至少会有10M次点击。
有几个变量(他们每个人都需要一个独特的列),我会允许人们使用点击跟踪时使用 - 但我不想限制他们到一些这些变量到5或者。这就是为什么我想创建表B,我可以为每次点击存储这些变量。
但是,每次点击都可能有5-15个这样的变量,具体取决于它们使用了多少个变量。如果我将它们存储在一个单独的表格中,用户可能会使用这些变量,这些表格会以10M/2周为单位进行复制。
为了显示变量的分析,我需要加入表格。
望着写入和最重要的读取性能,有什么不同,如果我加入一个100M行表一:
- 500行的表或到100M行表?
任何人都推荐反正常化它,比如有20列,如果它们没有被使用,那么存储NULL值。
你在考虑数据库完全错误。它只是不能这样工作。这不像你把一个巨大的桶放在另一个巨大的桶上面。相反,你从每个桶中取出一杯水并将它们连接起来。这是索引和数据结构发挥作用的地方。如果您加入两个表格但具有其他条件('WHERE x = y AND z = k'),那么您将加入两个减少的数据集。是的,桌子的尺寸会很重要,但不是你想象的那样。 – Mjh
@Mjh WHERE条件根本不会影响JOIN时序。在JOIN执行后执行WHERE,这意味着即使您有一个没有任何匹配的WHERE,也会发生JOIN。 – yanman1234
@ yanman1234你的回答指出优化器选择了这个策略。这就是我想强调的。答案不是黑色和白色。就像无法设计在未知硬件上运行的性能最好的数据库一样,这一直是限制因素。 – Mjh