えーEntity FrameworkもO/Rマッパが吐き出すクエリー分はクソよろしくない原則に当てはまるのかなーと。4.0以降では改善されたはずなんですよね。
Code Firstの紹介記事で書いたこのLinq式。
var allAlis = from p in context.Machines
where p.name == "ALis"
orderby p.name
select p;
そして実行時SQL Serverに送られたT-SQLのクエリ文
SELECT
[Extent1].[MachineId] AS [MachineId],
[Extent1].[name] AS [name]
FROM [dbo].[Machines] AS [Extent1]
WHERE N'ALis' = [Extent1].[name]
ORDER BY [Extent1].[name] ASC
対して難しくないはずなんだけどすでにWHEREあたりが残念さを醸し出してる。
もうなんかすごいがっかりな感じです。もうそりゃ心臓も止まるって感じです。
せめてこうしてほしいのよね。SQLがインデックス使うように。
SELECT
[Extent1].[MachineId] AS [MachineId],
[Extent1].[name] AS [name]
FROM [dbo].[Machines] AS [Extent1]
WHERE [Extent1].[name] = N'ALis'
ORDER BY [Extent1].[name] ASC
まぁ開発者がCode Firstだの、EFだの言い出したらDBAはメモリ増設やまだでしたらx64化とか考えた方が良いかもね。
どうにかして投げつけるクエリーに手動介入できないかな。設定ファイルとかで。DBA普通コード直せないんで。
コメント