Isu Prestasi Contains()
Rangka Kerja Entiti
Rangka Kerja Entiti terkenal kerana kesesakan prestasi. Ini berpunca daripada terjemahannya ke dalam siri pernyataan OR dan bukannya klausa IN yang lebih cekap dalam pertanyaan pangkalan data. Sebagai contoh, Contains()
diterjemahkan kepada ungkapan kompleks seperti Contains({1, 2, 3, 4})
, yang banyak sistem pangkalan data dikendalikan dengan buruk. Ketidakcekapan ini ditambah lagi dengan potensi isu pengimbangan pokok dan limpahan tindanan semasa penjanaan pertanyaan.((1 = @i) OR (2 = @i)) OR ((3 = @i) OR (4 = @i))
1. ID Pecahan: Pecahkan senarai input yang besar kepada bahagian yang lebih kecil. Proses setiap bahagian dengan pertanyaan berasingan. Ini mengurangkan kerumitan SQL yang dijana, tetapi memerlukan pengendalian yang teliti terhadap kemungkinan pendua dalam data input.
2. Kaedah Potongan Tersuai: Bangunkan kaedah tersuai yang menerima parameter saiz bongkah. Ini menawarkan kawalan dan kebolehsuaian yang lebih besar kepada ciri prestasi pangkalan data yang berbeza-beza.
3. Pertanyaan Tersusun: Gunakan CompiledQuery untuk pra-kompil pertanyaan. Ini mengasingkan fasa penjanaan pertanyaan, membantu menentukan sama ada kelembapan berpunca daripada penciptaan pertanyaan atau pengambilan data. Walau bagaimanapun, ingat bahawa CompiledQuery mempunyai had, terutamanya ketidakserasiannya dengan tatasusunan atau parameter secara langsung.IEnumerable
4. Penambahbaikan EF Masa Depan: Pasukan Rangka Kerja Entiti menyedari pengehadan ini dan merancang untuk menyokong klausa IN secara langsung dalam versi akan datang, dengan ketara meningkatkan prestasi .Contains()
Entiti Framework dan menawarkan penyelesaian praktikal untuk mengurangkan isu biasa ini.Contains()
Atas ialah kandungan terperinci Mengapa Pengendali `Mengandungi()` Rangka Kerja Entiti Begitu Lambat dan Bagaimana Saya Boleh Meningkatkan Prestasinya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!