我对MySQL和EntityFramework4.0有一个严重的问题。我已经把一个表放在EF设计师的表面上,一切看起来都很好。但是,当我以下列方式执行查询时:
using(entityContext dc = new entityContext()) {
int numRows = dc.myTable.Count();
}生成的查询如下所示:
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秒才能执行!
我做错什么了?是否有任何方法优化此查询和其他查询以生成正常代码,如:
SELECT COUNT(*) FROM table使用SQLServer生成相同的查询几乎不需要花费时间,并且生成正常的代码。
帮助!
编辑:我还想指出,我切换到了DevArt dotConnect MySQL LINQ驱动程序,使用L2S的EF速度快了1000000倍。这也包括查询。
在EF中选择anything似乎会产生完全疯狂的查询。
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绝对是在错误的地方。当然,这对我一点也不管用。
发布于 2010-05-21 12:23:07
问题可能与在.edmx或.edml文件中定义查询有关。
设计器经常生成DefiningQuery,以防您有视图,或者您的表没有定义主键。请检查模型的XML代码,如果存在但没有必要,请删除DefiningQuery。
https://stackoverflow.com/questions/2879205
复制相似问题