Istnieje proste LINQ do EF:Dlaczego EF generuje pod-zapytanie dla prostego zapytania?
var query = from p in _db.Posts
where p.BlogtId == blogId
select p;
Generuje SQL w tej formie:
SELECT
`Extent1`.`PostId`,
`Extent1`.`BlogId`,
...
FROM `Posts` AS `Extent1`
WHERE `Extent1`.`BlogId` = @p__linq__0
Ale kiedy dodać zamówienie do tego zapytania
var query = from p in _db.Posts
where p.BlogId == blogId
orderby p.PublishDate
select p;
Generuje to zapytanie:
SELECT
`Project1`.`PostId`,
`Project1`.`BlogId`,
...
FROM (SELECT
`Extent1`.`PostId`,
`Extent1`.`BlogId`,
...
FROM `Posts` AS `Extent1`
WHERE `Extent1`.`BlogId` = @p__linq__0) AS `Project1`
ORDER BY
`Project1`.`PublishDate` ASC
Dlaczego generowane jest pod-zapytanie? Występuje problem z wydajnością dla tego zapytania w MySQL. MySQL próbuje wykonać zapytanie wewnętrzne, które ściąga wszystkie rekordy w bazie danych, a następnie próbuje posortować motyw.
muszę rozwiązanie do generowania poniżej sql przez LINQ
SELECT
`Extent1`.`PostId`,
...
FROM `Posts` AS `Extent1`
WHERE `Extent1`.`BlogId` = @p__linq__0
ORDER BY
`Extent1`.`PublishDate` ASC
Co to za różnica dla Ciebie? – podiluska
@podiluska Występuje problem z wydajnością dla tego zapytania w MySQL. MySQL próbuje wykonać zapytanie wewnętrzne, które ściąga wszystkie rekordy w bazie danych, a następnie próbuje posortować motyw. –
Dlaczego miałoby to przyciągnąć ich wszystkich - są one filtrowane? – podiluska