I am using EF 4.4.20627.0with MySQL 5.6, MySQL .net connectorversion 6.6.4
I have a method that generated sql: very very slow(it takes more than 1 minute)
private List<TNews> GetPagedNews(int pagenum, int pagesize,
AdvSearcherArgs advcArgs, string keyword)
{
var dataSrc = _dbRawDataContext.TNews.Where(x => x.Id>0);
if (!string.IsNullOrWhiteSpace(advcArgs.PMAC))
{
dataSrc = dataSrc.Where(m => m.Pmac == advcArgs.PMAC);
}
if (!string.IsNullOrWhiteSpace(advcArgs.BegineDate))
{
var begin = Convertion.ToDate(advcArgs.BegineDate);
var end = Convertion.ToDate(advcArgs.EndDate);
dataSrc = dataSrc.Where(m => m.PmacDT >=begin && m.PmacDT<end);
}
dataSrc = dataSrc.OrderByDescending(n => n.PmacDT).Skip(pagenum * pagesize).
Take(pagesize);
var cnt = dataSrc.Count();
SetPagerValues(pagenum, pagesize, cnt);
return dataSrc.ToList();
}
generalized sql like this:
SELECT
`Project1`.*
FROM
(
SELECT
`Extent1`.*
FROM `tnews` AS `Extent1`
WHERE (`Extent1`.`Id` > 0)
AND ((`Extent1`.`PmacDT` >= '2013-01-01 00:00:00 ') AND
(`Extent1`.`PmacDT` < '2013-01-07 00:00:00 '))
) AS `Project1`
ORDER BY
`Project1`.`PmacDT` DESC LIMIT 0,20
if I moved the proposal order by, and limitin the bracket, the sql is very fast(costs less 1 sec):
SELECT
`Project1`.*
FROM
(
SELECT
`Extent1`.*
FROM `tnews` AS `Extent1`
WHERE (`Extent1`.`Id` > 0)
AND ((`Extent1`.`PmacDT` >= '2013-01-01 00:00:00 ') AND
(`Extent1`.`PmacDT` < '2013-01-07 00:00:00 '))
ORDER BY
`PmacDT` DESC LIMIT 0,20
) AS `Project1`
what do ProjectXu mean Extent1? and why does entity-framework not place orderby * limit x,youtside the real request?
sql is strange and definitely makes the query very slow, I will never write sql like this ... So, how to make EF generate CORRECTsql ??
any suggestions?