Rumah >pangkalan data >tutorial mysql >Mengapakah `IEnumerable.Contains()` Memberi Impak Ketara kepada Prestasi Rangka Kerja Entiti?
Rangka Kerja Rangka Kerja entiti: IEnumerable.Contains()
Menggunakan
. Sebaliknya, ia diterjemahkan Enumerable.Contains()
ke dalam satu siri keadaan IN
, yang menjadi sangat tidak cekap untuk dataset besar. Contains()
OR
mari kita periksa senario biasa:
EF menukarkan ini menjadi pertanyaan SQL yang kurang optimum yang menyerupai:
<code class="language-csharp">var ids = Main.Select(a => a.Id).ToArray(); var rows = Main.Where(a => ids.Contains(a.Id)).ToArray();</code>
Rantaian ini
<code class="language-sql">SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Primary] AS [Extent1] WHERE [Extent1].[Id] = 1 OR [Extent1].[Id] = 2 OR [Extent1].[Id] = 3 ...</code>klausa adalah punca utama kemerosotan prestasi.
OR
Beberapa kaedah dapat mengurangkan masalah prestasi ini:
(Core EF): Dalam teras EF, menggunakan DbSet.Contains()
secara langsung pada DBSET umumnya lebih disukai daripada . Ini membolehkan teras EF untuk menterjemahkan pertanyaan ke dalam klausa DbSet.Contains()
yang cekap. Enumerable.Contains()
IN
(EF6): EF6 diperkenalkan InExpression
untuk secara eksplisit menyokong klausa , memberikan terjemahan yang lebih langsung dan cekap.
InExpression
IN
. Ini mengurangkan kerumitan setiap pertanyaan individu.
IN
. Ini menawarkan kawalan maksimum tetapi mengorbankan manfaat EF's Orm.
IN
sama sekali. Ini mungkin melibatkan penstrukturan semula pertanyaan pangkalan data anda atau menggunakan teknik akses data yang berbeza.
Contains()
Atas ialah kandungan terperinci Mengapakah `IEnumerable.Contains()` Memberi Impak Ketara kepada Prestasi Rangka Kerja Entiti?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!