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

Cyr*_*pta 5 mysql linq-to-entities entity-framework

当我决定在我的新项目中使用OR/M(MySQL的实体框架)时,我希望它能节省我的时间,但我似乎已经失败了(现在第二次).

采用这个简单的SQL查询

SELECT * FROM POST ORDER BY addedOn DESC LIMIT 0, 50 
Run Code Online (Sandbox Code Playgroud)

它执行并在不到一秒的时间内给出结果(表格大约有60,000行).

这是我为此编写的等效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
Run Code Online (Sandbox Code Playgroud)

但是这个查询从来没有执行它总是超时(没有命令,需要5秒才能运行)!我的超时时间设置为12秒,因此您可以想象它的速度远不止于此.

  • 为什么会这样?
  • 有没有办法可以看到实体框架发送到数据库的实际SQL查询是什么?
  • 我是否应该放弃EF + MySQL并转向标准SQL,然后才能让它失去所有永恒的功能?

我重新校准了我的索引,尝试了急切的加载(即使没有orderby子句,它实际上也会失败)

请帮助,我即将放弃OR/M for MySQL作为一个失败的原因.

Cyr*_*pta 4

我所有的研究最终得出这样的结论:虽然 EF 一般来说对性能不利,但 MySql+EF 却是彻头彻尾的劣质。SO 选择 L2S 而不是 EF 是一个很好的举措,如果我能够访问 MS Sql 数据库而不是 MySQL,我也会朝这个方向发展。

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

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