我发现我使用了很多连接查询,尤其是从我的数据库中获取有关用户操作的统计信息。像这样的查询并不罕见:
from io in db._Owners where io.tenantId == tenantId
join i in db._Instances on io.instanceId equals i.instanceId
join m in db._Machines on i.machineId equals m.machineId
select ...
我的应用程序仍未激活,因此我无法判断这些查询在现实生活中是否会在计算上受到限制。我的问题:
答案 0 :(得分:13)
如果您没有性能信息,请不要进行优化。
过早优化是万恶之源。
1)我认为你不会达到“极限”。 2)这称为非正规化,如果你不知道是否存在问题,过早的非规范化只是浪费精力。
我说你的查询看起来很正常。
答案 1 :(得分:0)
1)当太多“连接”太多时,是否存在限制
不,连接数不是问题,而是每个表中的数据结构,索引的存在和使用以及需要采取哪些措施来获取数据。
规范化数据通常是关系数据库设计的主要目标。您通常会将非规范化视为仅在必要时优化查询的方法,因为需要额外的工作来维护数据一致性。
如果您真的担心,请发布数据模型ERD(数据库表及其相关方式)以及您用于项目的数据库(因为并非所有数据库都相同)。
答案 2 :(得分:0)
除非您拥有非常高的流量并正确设置了索引等,否则您应该没有问题。
对于报告/分析,某些地方将创建一个data warehouse,其最基本的形式是主数据库的[部分]非规范化副本。它们更容易报告,因为一个表通常包含报告中所需的大部分(如果不是全部)数据。它们也可以更快地读取,因为您不必加入这么多。但是,它们需要更多磁盘空间(重复数据)。如果允许写入,它们会更慢(必须更新所有重复数据),并且您将遇到保持重复数据一致的问题。
换句话说,除非您只进行报告(或只读访问),否则请保留联接。