Apa persamaan SQL dari .Skip()
metode di LINQ?
Misalnya: Saya ingin memilih baris 1000-1100 dari tabel database tertentu.
Apakah ini mungkin hanya dengan SQL? Atau apakah saya perlu memilih seluruh tabel, lalu mencari baris di memori? Idealnya saya ingin menghindari ini, jika memungkinkan, karena mejanya bisa sangat besar.
.net
sql
sql-server
sinar
sumber
sumber
SQL Server 2012 dan yang lebih baru telah menambahkan sintaks ini:
sumber
LINQ ke SQL melakukan ini dengan menggunakan fungsi jendela ROW_NUMBER:
Ini berfungsi, tetapi kebutuhan untuk membuat row_number dari ORDER BY dapat mengakibatkan kueri Anda diurutkan di sisi server dan menyebabkan masalah kinerja. Meskipun indeks dapat memenuhi persyaratan ORDER BY, kueri masih harus menghitung 1000 baris sebelum mulai mengembalikan hasil. Terlalu sering pengembang melupakan ini dan hanya melempar kontrol pagination ke tabel baris 5 juta dan bertanya-tanya mengapa halaman pertama dikembalikan jauh lebih cepat daripada yang terakhir ...
Meskipun demikian, menggunakan ROW_NUMBER () mungkin merupakan keseimbangan terbaik antara kemudahan penggunaan dan kinerja yang baik, asalkan Anda memastikan Anda menghindari pengurutan (kondisi ORDER BY dapat dipenuhi oleh indeks).
sumber
Coba yang ini:
Contoh:
sumber
Melakukan hal ini:
Jalankan .Skip (1000). Ambil (100) pada konteks data LINQ ke SQL dan lihat keluaran SQL. Ini akan menghasilkan pernyataan SQL untuk Anda yang melakukan apa yang Anda gambarkan.
Ini tidak akan seanggun tetapi menyelesaikan pekerjaan.
sumber
Tidak, tetapi Anda dapat meniru klausa LIMIT MySQL (tautan Stack Overflow) untuk mendapatkan hasil yang sama.
sumber