实体框架+MySQL-为什么性能如此糟糕?

实体框架+MySQL-为什么性能如此糟糕?,mysql,entity-framework,linq-to-entities,Mysql,Entity Framework,Linq To Entities,当我决定在我的新项目中使用OR/M Entity Framework for MySQL时,我希望它能节省我的时间,但现在我似乎第二次失败了 以这个简单的SQL查询为例 SELECT * FROM POST ORDER BY addedOn DESC LIMIT 0, 50 它在不到一秒钟的时间内执行并给出结果,因为表应该有大约60000行 这里是我为此编写的等效LINQ To Entities查询 var q = (from p in db.post orderby

当我决定在我的新项目中使用OR/M Entity Framework for MySQL时,我希望它能节省我的时间,但现在我似乎第二次失败了

以这个简单的SQL查询为例

SELECT * FROM POST ORDER BY addedOn DESC LIMIT 0, 50 
它在不到一秒钟的时间内执行并给出结果,因为表应该有大约60000行

这里是我为此编写的等效LINQ To Entities查询

var q = (from p in db.post
            orderby p.addedOn descending
             select p).Take(50);

    var q1 = q.ToList(); //This is where the query is fetched and timed out
但是这个查询从来没有执行过,它总是在没有orderby的情况下超时,运行需要5秒钟!我的超时时间设置为12秒,所以你可以想象它所花费的时间远不止这些

为什么会这样? 是否有一种方法可以查看Entity Framework发送给db的实际SQL查询是什么? 我是否应该放弃EF+MySQL,转而使用标准SQL,以免我永远无法让它正常工作? 我已经重新校准了我的索引,尝试了快速加载,这实际上使它在没有orderby子句的情况下也失败了


请帮帮我,我将放弃或/M而放弃MySQL,因为这是一个失败的原因。

我想第一步应该是弄清楚向MySQL发送的是什么SQL。本文解释了如何在MySQL中打开日志记录。如果可能,您可能希望查看是否改进生成的SQL。

您还可以通过ToTraceString从EF提供程序获取SQL

我所有的研究最终得出结论:虽然EF总体上不利于性能,但MySql+EF完全是劣质的。因此,选择L2S而不是EF是一个很好的举措,如果我能够访问MS Sql数据库而不是MySQL,我也会朝着这个方向前进

不幸的是,我被MySql困住了,因为它是免费的,这迫使我放弃了EF。现在,我又回到了用旧的、经过测试的、高效的方式对SQL查询进行硬编码的过程中,结果很好


我给了MYSql+EF一个通行证,但我很想听听在一个非平凡项目中成功使用它的人的意见。

我使用开源项目DBLinq成功地将MYSql与Linq结合使用。我知道它不是实体框架,但probleming模型很熟悉。希望这对任何人都有帮助

.NET4与此无关。我认为MySQL实体框架提供程序很糟糕。我想说的是,如果生成的SQL真的很糟糕,那么使用.NET4.0您可能会看到改进。但首先让我们看看发送到MySQL的是什么。MySQL没有内置的提供程序,因此.NET 4不会改变任何事情:P我猜.Take是在客户端完成的,而不是转换到某个限制。这可能是一个原因,但我认为这不太可能,因为如果没有orderby子句,带take的查询确实会返回值,但如果没有take,它不会返回太多行的值。@AndyGaskell生成的SQL类似于select*from select*from post orderby ADEDON desc limit 0,20显然这将非常缓慢,有什么方法可以改进这个问题吗?好吧,我已经放弃了EF+MySQLI,实际上我想把它作为对pubb答案的评论发布。要归功于他,而不是我sql就像select*from select*from post orderby ADEDON desc limit 0,20,请看这个,基本上是相同的问题:相同的问题,因为生成的sql不好,请看:对不起,URL错误