0

ASP.NET 4.5 Web サイトに Simple.Data Micro-ORM を使用することを考えています。ただし、使用するかどうかを決定する前に知っておく必要があることがあります。

たとえば、次の Join クエリを見てみましょう。

var albums = db.Albums.FindAllByGenreId(1)
  .Select(
db.Albums.Title,
db.Albums.Genre.Name);

このクエリは次のように変換されます。

select 
 [dbo].[Albums].[Title],
 [dbo].[Genres].[Name] 
from [dbo].[Albums] 
   LEFT JOIN [dbo].[Genres] ON ([dbo].[Genres].[GenreId] = [dbo].[Albums].[GenreId]) 
WHERE [dbo].[Albums].[GenreId] = @p1
@p1 (Int32) = 1

「Genres」テーブルが、数千または数百万の行を持つテーブルであると仮定しましょう。JOIN が行われた後にデータをフィルター処理するのは非常に非効率的である可能性があると思います。これは、このクエリが Simple.Date で変換したものです。

Generes テーブルで最初にデータをフィルター処理する方がよいでしょうか。つまり、最初に SELECT ステートメントを作成し、そのフィルター処理されたテーブルで JOIN を作成しますか?

事前にデータをフィルタリングした方がよいのではないでしょうか?

さらに、Simple.Data を使用してそのタイプの複雑な (フィルター処理されたテーブルでの結合) クエリを作成するオプションはありますか。

Simple.Data を続行するか、別のマイクロ ORM を優先してダンプするかを知るには、回答が必要です。

4

3 に答える 3

5

データベース エンジンによる SQL の解釈方法と実行方法について混乱しています。最新のデータベースは、クエリを実行する最善の方法について非常にスマートであり、SQL ステートメントに表示される命令の順序は、それらが実行される順序とは何の関係もありません。

SQL Management Studio を使用していくつかのクエリを実行し、実行計画を調べて、それらが実際にどのように最適化および実行されているかを確認してください。または、より適切に機能すると思われる SQL を試して、Simple.Data によって生成されたものと比較して実際にどのように機能するかを確認してください。

于 2012-10-17T21:50:16.697 に答える
2

Simple.Dataが生成しているSQLは、理想的なT-SQLです。正直なところ、自分でSQLを作成している場合に作成するものです。

このSQLにより、SQL Serverは実行プランを最適化できます。これは、データの最も効率的な取得を意味するはずです。

于 2012-10-17T21:09:30.540 に答える
-1

Simple.Data の優れた点は、それが生成する sql に疑問や問題がある場合は、ストアド プロシージャを呼び出すだけでよいことです。

db.ProcedureWithParameters(1, 2);
于 2014-11-05T23:44:51.910 に答える