mysql查询速度

时间:2009-07-31 13:39:38

标签: mysql database database-design

我只是想问一下,存储数据的两种方法中哪一种会产生更好的结果

一个。将数据存储在一个包含超过20列的单个表中

OR

B中。将数据分配到两个表中,每个表分别为15和6列

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

所以,这是两个中最好的选择...

由于

3 个答案:

答案 0 :(得分:2)

即使在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,第二种设计的查询也会更快完成。< / p>

答案 1 :(得分:1)

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

答案 2 :(得分:1)

如果不向我们提供更多细节,我们的答案就不可能是明确的。你会拆分列以避免重复吗?如果是这样,您可能会看到简单查询的速度提升。但是,如果您的查询涉及复杂的连接,则可能会出现性能损失。其中很大程度上取决于您如何索引表格。

在您的问题中,没有足够的信息可以提供更好的答案,而不会进入2小时的数据库设计讨论。

我建议在stackoverflow上阅读how-do-i-ask-for-help-optimizing-fixing-queries-in-mysql以了解如何向MySQL寻求帮助。