C#实体FrameWork MySQL慢查询计数()

Mat*_* M. 7 c# mysql entity-framework

我遇到了MySQL和Entity Framework 4.0的严重问题.我已将表格放到EF Designer表面上,一切似乎都没问题.但是,当我以下列方式执行查询时:

using(entityContext dc = new entityContext()) {
  int numRows = dc.myTable.Count();
}
Run Code Online (Sandbox Code Playgroud)

生成的查询看起来像这样:

SELECT `GroupBy1`.`A1` AS `C1`
FROM   (SELECT Count(1) AS `A1`
        FROM   (SELECT `pricing table`.`a`,
                       `pricing table`.`b`,
                       `pricing table`.`c`,
                       `pricing table`.`d`,
                       `pricing table`.`e`,
                       `pricing table`.`f`,
                       `pricing table`.`g`,
                       `pricing table`.`h`,
                       `pricing table`.`i`
                FROM   `pricing table` AS `pricing table`) AS `Extent1`) AS `GroupBy1`
Run Code Online (Sandbox Code Playgroud)

显而易见,这是一个令人难以置信的未经优化的查询.它正在选择每一行!这不是最佳的,我甚至不可能在此时使用MySQL + EF.

我已经尝试了MySQL 6.3.1 [安装很有趣]和DevArt的dotConnect for MySQL,两者都产生了相同的结果.这张表有150万条记录......需要6-11秒才能执行!

我究竟做错了什么 ?有没有办法优化这个[和其他查询]来生成合理的代码,如:

SELECT COUNT(*) FROM table
Run Code Online (Sandbox Code Playgroud)

使用SQLServer生成相同的查询几乎没有时间,并生成合理的代码.

救命!

编辑:我还想指出,我切换到DevArt dotConnect MySQL LINQ to SQL驱动程序,并使用L2S over EF快1000000倍.这也包括查询.

在EF中选择任何东西似乎都会产生完全疯狂的查询.

dc.pricing_table.OrderBy(j => j.a).Skip(100).Take(100).ToList();

SELECT   `Extent1`.`a`,
         `Extent1`.`b`,
         `Extent1`.`c`,
         `Extent1`.`d`,
         `Extent1`.`e`,
         `Extent1`.`f`,
         `Extent1`.`g`,
         `Extent1`.`h`,
         `Extent1`.`i`
FROM     (SELECT `pricing table `.`a`,
                 `pricing table `.`b`,
                 `pricing table `.`c`,
                 `pricing table `.`d`,
                 `pricing table `.`e`,
                 `pricing table `.`f`,
                 `pricing table `.`g`,
                 `pricing table `.`h`,
                 `pricing table `.`i`
          FROM   `pricing table ` AS `pricing table`) AS `Extent1`
ORDER BY `a` ASC
LIMIT    100,100
Run Code Online (Sandbox Code Playgroud)

再次,一个完全低调的错误查询.LIMIT 100,100绝对是错误的地方.这当然不会对我有用.

Dev*_*art 7

问题可能与您在.edmx或.edml文件中定义查询有关.
如果您有View,或者您的表没有定义主键,Designer通常会生成DefiningQuery.请检查模型的XML代码并删除DefiningQuery,以防它存在但不必要.