MySQL 查询速度

问题描述 投票:0回答:3

我只是想问这两种存储数据的方式中哪一种可以给我更好的结果

A.将数据存储在具有超过 20 列的单个表中

B.将数据分布到两个表中,每个表有 15 列和 6 列

还有一件事,即使我分发数据,在 60% 的情况下我仍然可能必须同时访问两个表...

那么,两者中哪个是最好的选择?

mysql database database-design
3个回答
2
投票

A

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
字节整数的行比扫描千字节
VARCHAR
的行要快得多,并且即使有额外的
JOIN
,第二种设计的查询也会更快地完成。


1
投票

我想这取决于数据库模式。如果只有小字段,方法 A 可能更好。但是,如果有大字段可以放入较少使用的表中,则按照方法 B 中的建议单独存储它们可能是有意义的。


1
投票

您会拆分列以避免重复吗?如果是这样,您可能会发现简单查询的速度有所提高。但是,如果您的查询涉及复杂的联接,您可能会发现性能受到影响。这很大程度上取决于你如何索引你的表。

© www.soinside.com 2019 - 2024. All rights reserved.