Количество медленных запросов MySQL C# Entity FrameWork ()

У меня есть серьезная проблема с MySQL и Платформой Объекта 4.0. Я отбросил Таблицу на поверхность Разработчика EF, и все кажется OK. Однако, когда я выполняю запрос следующим способом:

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 [который был забавой установить] и dotConnect DevArt для MySQL, и оба приводят к тем же результатам. Эта таблица имеет 1,5 миллиона записей.. и берет 6-11s для выполнения!

Что я делаю неправильно? Есть ли любой способ оптимизировать это [и другие запросы] для создания нормального кода как:

SELECT COUNT(*) FROM table

?

Генерация того же запроса с помощью SQLServer не занимает фактически времени и производит нормальный код.

На помощь!

Править: Я также хотел бы указать, что я переключился на MySQL LINQ DevArt dotConnect к драйверу SQL, и использующий L2S по EF 1000000x быстрее. Это включает запросы также.

Выбор чего-либо в 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

Снова, полностью bassackwards неправильно запрашивают. ПРЕДЕЛ 100,100 находится в абсолютно неправильном месте. Это, конечно, не будет работать на меня вообще.

7
задан Seph 27 March 2012 в 08:34
поделиться

1 ответ

Проблема может быть связана с тем, что у вас есть определяющий запрос в вашем файле .edmx или .edml.
Designer часто генерирует DefiningQuery, если у вас есть View или в вашей таблице не определен первичный ключ. Пожалуйста, проверьте XML-код вашей модели и удалите DefiningQuery, если он присутствует, но не нужен.

7
ответ дан 7 December 2019 в 07:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: