Sql 当您有大量桥接表时,测量单个或多个查询的性能

Sql 当您有大量桥接表时,测量单个或多个查询的性能,sql,database-design,query-optimization,Sql,Database Design,Query Optimization,我询问了单个联接或多个select n+1查询 我想知道,如果你有多对多关系和很多桥牌表,这是否是相同的 例如,以下是我的表格: 表:人员id、第一个、最后一个、年龄、电话等。 表:角色id、名称 表:PeopleRoles id、personID、roleID 表:技能id、名称 表:PeoplesKillID、personID、skillID 因此,如果我加入,我会为每个人获得多行,假设一个人有多个角色或多个技能 假设有更多这样的表,其中包含许多关系,这会更快: 备选案文1: 从应用程序中选

我询问了单个联接或多个select n+1查询

我想知道,如果你有多对多关系和很多桥牌表,这是否是相同的

例如,以下是我的表格:

表:人员id、第一个、最后一个、年龄、电话等。 表:角色id、名称 表:PeopleRoles id、personID、roleID 表:技能id、名称 表:PeoplesKillID、personID、skillID

因此,如果我加入,我会为每个人获得多行,假设一个人有多个角色或多个技能

假设有更多这样的表,其中包含许多关系,这会更快:

备选案文1: 从应用程序中选择* 然后在每个应用程序中循环并运行Select*from角色,其中applicationID=id内部连接 备选案文2: 或者尝试创建一个返回大型结果集的大型查询,然后在将其转换为数据结构时需要对其进行规范化,因为我当然会在多行中获得相同的应用程序。

只要没有那么多重复值,选项2几乎总是会更快。这实际上取决于冗余数据的大小-但是当您有大量行时,必须执行多个select语句真的是致命一击,因为它必须执行循环,并且不能在服务器端执行任何更复杂类型的连接,但可能更重要的是-如果您的逻辑正在进行许多数据库调用,这些都是跨流程/网络边界发生的,其本身要慢一个数量级

如果结果真的很重要的话,还有其他方法可以优化结果——您可以让数据库创建一些XML,这些XML可以在数据层和逻辑层之间更高效地序列化,但这需要大量的工作,几乎没有人会称之为跨平台或通用

当然,这一切都回避了一个问题。。。为什么不使用像LINQtoEntities或LINQtoSQL或NHibernate这样的ORM呢?为什么要重新发明这个轮子