2016-04-05 19 views
0

私はEntity Frameworkを使用していますが、パフォーマンスに関して質問があります。ここでLinqメソッドの追加とストアドプロシージャの追加

は私のLINQのメソッドを追加します:

CREATE PROC prCreateCar 
    (@plate NVARCHAR(20), 
    @model NVARCHAR(50), 
    @color NVARCHAR(10), 
    @image NVARCHAR(MAX)) 
AS 
BEGIN 
    INSERT INTO CarTable 
    VALUES (@plate, @model, @color, @image) 
END 

そして、これとasp.netからそれを呼び出す:

CarTable newCar = new CarTable() 
      { 
       CarPlate = plate, 
       CarModel = model, 
       CarColor = color, 
       CarImage = image 
      }; 

entity.CarTable.Add(newCar); 
entity.SaveChanges(); 

そして、ここでは、同じ目的のために、ストアドプロシージャです

entity.prCreateCar('34 F5 3498','Renault Clio','Blue','Images/Cars/clio.png'); 

どちらも問題なく動作しますが、ここでは私の質問です。私は、ストアドプロシージャが高速だが、それは本当ですか?それが真であれば、SELECT、DELETE、UPDATE、INSERTのようなすべての条件で高速ですか?

+4

あなた自身がそれを測定するでしょう。 http://stackoverflow.com/questions/14530/linq-to-sql-vs-stored-proceduresおよびhttp://stackoverflow.com/questions/752064/performance-difference-between-linq-and-stored-proceduresを参照してください。 – Habib

+0

これはEntity Frameworkの下で使用している**実際のRDBMS **に依存しますが、この方法でSQL Serverを使用している場合は、パフォーマンスは非常に匹敵します。両方のアプローチでは最終的に実行する必要のあるパラメータ化されたクエリが生成されます。両方とも正しく実行されれば、非常に似たように動作します。 –

+2

しかし、注意すべき点は次のとおりです。*なぜ*画像に 'nvarchar(max)'を使用していますか?これは**バイナリ**のデータセットです。これは文字列ベースのデータ型の代わりに 'varbinary(max)'を使ったほうが良いでしょう –

答えて

0

このような単純なクエリの場合、違いはほとんどありません。より複雑なクエリ(複数の異なるテーブル/サブクエリ/などの結合)を使用する場合は、ストアドプロシージャのさまざまなパラメータのパフォーマンスを使用するだけで、データベースは実行プランを一度作成してからキャッシュする必要があります通常のSQLクエリごとに再作成されます。

多くの行を挿入する必要がある場合は、外部ソース(カタログデータなど)からデータをインポートするときは、BULK INSERTステートメントを使用します。また、通常のEF操作と同様の方法でその機能を使用できるEFの拡張もありますが、実際の操作はありません。 1つの例はEntityFramework.BulkInsert

関連する問題