我有四个表,这些表存储了很多有关某物的信息。该信息可以分为四类。总是查询一类信息,偶尔查询另外三类。

由于所有这些表之间都存在一对一的关系,因此可以将它们存储在一个表中。

我的问题是:什么是更好的性能明智的选择?


一张带有SELECT id, x, y, z FROM allSELECT id, u, v FROM all之类的查询的表
带有SELECT * FROM xyzSELECT * FROM uv之类的查询的多个表


(其中iduvxyz是列,而all是具有所有列的表,而xyzuv是具有相应列的表)

最佳答案

这真的取决于。

从理论上讲,关系数据库被设计为具有表之间的有效关系。因此,如果a.x和b.x都是相同的主键(eq_ref连接),则SELECT a.x, a.y, a.z FROM a应该与SELECT a.x, a.y, b.z from a JOIN b ON a.x = b.x一样快。

例子:


由于磁盘上记录的物理位置,因此从一个大表中选择多个顺序行将比从两个小表中选择顺序稍快。
除非不同的表位于不同的硬盘上,否则MySQL可以并行获取它们。
但是,也可以使用PARTITIONING对一个表完成此操作。
如果某些查询的运行频率高于其他查询,则可能首先要针对这些查询进行优化。覆盖指数也许可以解决您的问题?
使用多个表也会重复主键。但话又说回来,InnoDB上的索引也是如此。
使用多个表,更难维护完整性。您将使用外键和插入交易(甚至触发器)?


结论:

这真的取决于您的情况。找出答案的最佳方法是进行测试和基准测试。

关于mysql - 合并具有一对一关系的表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6700021/

10-13 08:21