首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#实体FrameWork MySQL慢速查询计数()

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

Stack Overflow用户
提问于 2010-05-21 02:20:32
回答 1查看 2K关注 0票数 7

我对MySQL和EntityFramework4.0有一个严重的问题。我已经把一个表放在EF设计师的表面上,一切看起来都很好。但是,当我以下列方式执行查询时:

代码语言:javascript
复制
using(entityContext dc = new entityContext()) {
  int numRows = dc.myTable.Count();
}

生成的查询如下所示:

代码语言:javascript
复制
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`

应该很明显,这是一个令人痛苦的未优化查询。它选择每一行!这不是最优的,我甚至不可能在这一点上使用MySQL + EF。

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

我做错什么了?是否有任何方法优化此查询和其他查询以生成正常代码,如:

代码语言:javascript
复制
SELECT COUNT(*) FROM table

使用SQLServer生成相同的查询几乎不需要花费时间,并且生成正常的代码。

帮助!

编辑:我还想指出,我切换到了DevArt dotConnect MySQL LINQ驱动程序,使用L2S的EF速度快了1000000倍。这也包括查询。

在EF中选择anything似乎会产生完全疯狂的查询。

代码语言:javascript
复制
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

同样,一个完全错误的查询。100,100绝对是在错误的地方。当然,这对我一点也不管用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-05-21 12:23:07

问题可能与在.edmx或.edml文件中定义查询有关。

设计器经常生成DefiningQuery,以防您有视图,或者您的表没有定义主键。请检查模型的XML代码,如果存在但没有必要,请删除DefiningQuery。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2879205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档