Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mensimulasikan OFFSET dalam SQL Server?
Mensimulasikan OFFSET dalam Pertanyaan Pelayan SQL
SQL Server tidak mempunyai klausa langsung OFFSET
, tidak seperti beberapa sistem pangkalan data lain. Artikel ini memperincikan cara untuk mencapai kefungsian yang sama iaitu melangkau baris dan mendapatkan subset.
Penyelesaian untuk SQL Server 2005 dan Kemudian:
Kaedah paling berkesan untuk versi 2005 dan ke atas melibatkan penggunaan ROW_NUMBER()
dalam subkueri:
Tetapkan Nombor Baris: Subkueri memberikan nombor baris unik pada setiap rekod, disusun mengikut lajur yang ditentukan (cth., ID
).
<code class="language-sql">SELECT col1, col2, ROW_NUMBER() OVER (ORDER BY ID) AS RowNum FROM MyTable</code>
Tapis mengikut Nombor Baris: Pertanyaan luar kemudian menapis set hasil ini untuk memilih hanya baris dalam julat yang dikehendaki. @startRow
dan @endRow
masing-masing mewakili nombor baris permulaan dan penamat.
<code class="language-sql">SELECT col1, col2 FROM ( SELECT col1, col2, ROW_NUMBER() OVER (ORDER BY ID) AS RowNum FROM MyTable ) AS RowNumberedTable WHERE RowNum BETWEEN @startRow AND @endRow;</code>
Pendekatan untuk SQL Server 2000:
SQL Server 2000 memerlukan strategi alternatif:
Imbas Langkau Indeks: Jika indeks yang sesuai wujud dengan klausa ORDER BY
yang sepadan dengan pesanan yang anda inginkan, enjin pangkalan data mungkin boleh melangkau baris dengan cekap menggunakan imbasan indeks. Ini sangat bergantung pada indeks dan pengedaran data.
Fungsi Tetingkap (Anggaran): Walaupun tidak seterus seperti ROW_NUMBER()
, anda berpotensi menggunakan fungsi tetingkap lain untuk mencapai kesan yang serupa, walaupun ini mungkin kurang cekap daripada kaedah untuk tahun 2005 .
Lelaran berasaskan kursor: Kursor dengan kunci tatal membolehkan anda melelar melalui set hasil dan mengambil baris secara selektif, tetapi pendekatan ini biasanya kurang berprestasi berbanding penyelesaian berasaskan set. Elakkan perkara ini melainkan sangat perlu.
Pertimbangan Prestasi:
Untuk mengoptimumkan prestasi:
SELECT
untuk mengurangkan pemindahan data.ROW_NUMBER()
pengiraan atau imbasan indeks.Dengan menggunakan teknik ini, anda boleh mensimulasikan fungsi OFFSET
dengan berkesan dalam SQL Server, tanpa mengira versinya. Untuk prestasi optimum, kaedah ROW_NUMBER()
(untuk SQL Server 2005 dan lebih baru) amat disyorkan.
Atas ialah kandungan terperinci Bagaimana untuk Mensimulasikan OFFSET dalam SQL Server?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!