在MVC的EDM中使用外键会降低执行速度吗?

时间:2015-02-12 13:00:11

标签: c# asp.net-mvc linq edmx ado.net-entity-data-model

  

如果3个表的EDM如下面的figer所示。

Image of

然后,

  1. 在EDM和DB中使用这些外键是否很好?
  2. 这样的DB设计可以减慢执行速度吗?
  3. 使用外键或者更好的架构 不使用外键?
  4. 如果有人希望来自表-3的数据来自TAble-1的id

    那么它可以通过两种方式完成。

    予。

      

    db.TAble_1.FirstOrDefault(m => m.TAble_1ID == 2).Table_2.FirstOrDefault()。TAble_3;

    II。

      

    加入LINQ

    1. 哪一个更快?
    2. 如果有人想从来自TA-3

      的id的table-1中获取数据

      那么它可以通过两种方式完成。

      予。

        

      db.TAble_1.FirstOrDefault(m => m.TAble_3ID == 2).Table_2.TAble_3;

      II。

        

      加入LINQ

      1. 哪一个更快?
      2. 提前谢谢大家。

1 个答案:

答案 0 :(得分:2)

不,基本上什么是EDM或Lets以Linq为例,它只是SQL对象查询的转换器,然后使用SqlConnection对象触发与Inline查询相同的内容。

这个问题有两个方面:

  1. 数据库设计是否合适? - 因为这实际上会在性能上有所作为。设计是查询的核心,它的精炼可以解决您的大多数性能问题。
  2. EDMX,Linq To Sql,Entity Framework或其他一些ORM(对象关系映射器):通常为什么会使用ORM?由于他们的查询很少,而且他们对SQL Server的熟练程度不高,或者他们希望开发人员的学习曲线比较直率,并且需要轻松快速地确定简单的小查询(具有存储过程)简单选择没有意义。)因此它通过将对象查询(LINQ)转换为Sql语句来解决您的问题。
  3. 回答你的案子: 这取决于您使用相同的查询,如果它已加入,您所声明的查询将不会产生差异(考虑到您的设计是正确的。)EDM或上述任何内容适用于任何此类查询,

    但是,不要将它用于“TOO BIG QUERIES”或不要用此替换存储过程,因为它会将您的Object查询转换为SQL语句,发送它到DB Server,Sql Server Engine解析Queries,然后执行;因此,如果查询太大,那么在这种情况下,网络延迟,查询的编译,(并且因为查询正在编译它不会编译执行计划。)而在存储过程的情况下,它已经存在并且查询运行得更快

    有用的链接:

    Execution Plan