えー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普通コード直せないんで。
コメント