5

EF への単純な Linq があります。

var query = from p in _db.Posts
            where p.BlogtId == blogId
            select p;

次の形式で SQL を生成します。

SELECT
`Extent1`.`PostId`, 
`Extent1`.`BlogId`, 
...
FROM `Posts` AS `Extent1`
 WHERE `Extent1`.`BlogId` = @p__linq__0

しかし、このクエリに order by を追加すると

var query = from p in _db.Posts
            where p.BlogId == blogId
            orderby p.PublishDate
            select p;

このクエリを生成します

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

これによりサブクエリが生成されるのはなぜですか?MySQL では、このクエリのパフォーマンスに問題があります。MySQL は、データベース内のすべてのレコードを取得し、テーマを並べ替えようとする内部クエリを実行しようとしています。

以下のSQLをlinqで生成するソリューションが必要です

SELECT
`Extent1`.`PostId`, 
...
FROM `Posts` AS `Extent1`
 WHERE `Extent1`.`BlogId` = @p__linq__0
 ORDER BY 
`Extent1`.`PublishDate` ASC
4

1 に答える 1