【发布时间】:2009-07-31 22:05:33
【问题描述】:
我只是想问一下,这两种存储数据的方式中哪一种会得到更好的结果
A.将数据存储在超过 20 列的单个表中
或
B.将数据分布到两个表中,每个表有 15 列和 6 列
还有一件事,即使我分发数据,在 60% 的情况下,我仍然可能需要同时访问两个表...
那么,这两者中哪个是最好的选择......
谢谢
【问题讨论】:
标签: mysql database database-design
我只是想问一下,这两种存储数据的方式中哪一种会得到更好的结果
A.将数据存储在超过 20 列的单个表中
或
B.将数据分布到两个表中,每个表有 15 列和 6 列
还有一件事,即使我分发数据,在 60% 的情况下,我仍然可能需要同时访问两个表...
那么,这两者中哪个是最好的选择......
谢谢
【问题讨论】:
标签: mysql database database-design
JOIN,即使在 PRIMARY KEY 上,所需的时间也是顺序扫描的数倍。
当然最好是看表,但我有根据的猜测是把它们放在一起会更好。
但是,如果您所做的是规范化(而不是单纯的表拆分),那么规范化设计会更快。
例如,如果您的数据如下所示:
id value
1 Really really long value 1
2 Really really long value 1
3 Really really long value 1
…
1000 Really really long value 2
1001 Really really long value 2
1002 Really really long value 2
…
,扫描这张表需要很长时间,因为值很大。
对表格进行规范化会得到以下结果:
id value
1 1
2 1
3 1
…
1000 2
1001 2
1002 2
…
val_id value
1 Really really long value 1
2 Really really long value 1
扫描4-byte 整数行比扫描千字节VARCHAR 快得多,即使有额外的JOIN,第二个设计的查询也会更快完成。
【讨论】:
我猜这取决于数据库架构。如果只有小字段,方法 A 可能更好。但是,如果有大字段可以放入较少使用的表中,则按照方法 B 中的建议将它们单独存储可能是有意义的。
【讨论】:
如果不向我们提供更多详细信息,我们的答案不可能是确定的。您会拆分列以避免重复吗?如果是这样,您可能会看到简单查询的速度有所提高。但是,如果您有涉及复杂连接的查询,您可能会看到性能下降。很大程度上取决于你如何索引你的表。
您的问题中没有足够的信息来给出更好的答案,没有深入讨论数据库设计的 2 小时。
我建议阅读 stackoverflow 上的 how-do-i-ask-for-help-optimizing-fixing-queries-in-mysql 以了解如何寻求有关 MySQL 的帮助。
【讨论】: