Mam poważny problem z MySQL i Entity Framework 4.0. Upuściłem tabelę na powierzchnię EF Designer i wszystko wydaje się w porządku. Jednak, kiedy przeprowadzić kwerendę w następujący sposób:C# Entity Framework MySQL Powolne Zapytania hrabia()
using(entityContext dc = new entityContext()) {
int numRows = dc.myTable.Count();
}
Kwerenda, która jest generowana wygląda mniej więcej tak:
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`
Jak powinno być oczywiste, że jest to zapytanie excruciatingly unoptimized. To wybiera każdy pojedynczy wiersz! To nie jest optymalne, ani nawet nie mogę używać MySQL + EF w tym momencie.
Próbowałem zarówno MySQL 6.3.1 [to była zabawa do zainstalowania] i za Devart dotConnect dla MySQL i oba wytwarzają takie same wyniki. Ta tabela ma 1,5 miliona rekordów i zajmuje 6-11 sekund, aby wykonać!
Co robię źle? Czy istnieje jakiś sposób, aby zoptymalizować to [i innych zapytań] aby produkować sane kod jak:
SELECT COUNT(*) FROM table
?
Generowanie tego samego zapytania używając SQLServer trwa praktycznie nie czas i produkuje kod sane.
Pomoc!
Edit: Chciałbym również podkreślić, że przeszedłem do Devart dotConnect MySQL LINQ to SQL i za pomocą sterownika L2S nad EF jest 1000000x szybciej. Dotyczy to również zapytań.
Wybór nic w EF zdaje się generować zupełnie Bonkers zapytań.
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
Ponownie, całkowicie błędne zapytanie. LIMIT 100,100 znajduje się w absolutnie niewłaściwym miejscu. To oczywiście nie zadziała w ogóle dla mnie.
Co się dzieje, kiedy przepisać zapytanie jak tak: int NumRows = dc.myTable.Select (a => a.AnyColumnInPricingTable) .Count(); –
Nie żartuję .. identyczne wyjście jak wyżej. –