MySQL 性能:单表或多表

Posted

技术标签:

【中文标题】MySQL 性能:单表或多表【英文标题】:MySQL Performance: Single table or multiple tables 【发布时间】:2010-11-13 07:40:45 【问题描述】:

我有 8 组数据,每组大约 30,000 行,数据结构相同,只是针对不同的语言。

网站前端会获得比较高的流量。

所以我的问题是关于 mysql 的性能,如果我应该有一个包含一列的表来区分数据属于哪个集(即列“语言”)还是为每个语言集创建单独的表?

(如果可能的话,解释一下为什么真的很有帮助)

提前致谢 沙迪

【问题讨论】:

【参考方案1】:

我会选择单表设计。无论表有多“宽”,寻找时间,使用适当的索引,都应该完全相同。

除了性能问题,这将简化设计和与其他表的关系(外键等)。

【讨论】:

【参考方案2】:

“每种语言一个表”设计的另一个缺点是每次添加一个表时都必须更改架构。

语言列意味着您只需要添加数据,这不是侵入性的。后者是要走的路。

【讨论】:

你可以用正常的关系来做到这一点:translationStrings(stringId, string), translations(stringId, languageId, translation) - 它可能会在选择时增加一个关系/外键/连接,但增加了灵活性。 【参考方案3】:

我也会采用单桌设计。由于 language_key 的基数非常低,我将通过 language_key 对表进行分区,而不是定义索引。 (如果你的数据库支持的话。)

【讨论】:

【参考方案4】:

我同意其他回答 - 我会使用一张桌子。关于性能优化,许多因素可能会对性能产生更大的影响:

适当的索引 编写/测试查询效率 选择合适的存储引擎 硬件 文件系统的类型和配置 优化mysql配置设置

...等等。我是High Performance MySQL的粉丝

【讨论】:

以上是关于MySQL 性能:单表或多表的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 备份恢复单表或多表数据步骤

DynamoDb 表设计:单表或多表

单表或多数据库表

MySQL 性能优化系列之一 单表预处理

多表数据增量导入详细文档

MySQL 多表关联查询和多次单表查询哪个好?