Dalam kueri yang Anda poskan:
select * from <table_name>;
Tidak ada yang namanya baris 100th-200th, karena Anda tidak menentukan ORDER BY. Pesanan tidak dijamin kecuali Anda menyertakan ORDER OLEH untuk banyak alasan menarik, tapi itu bukan intinya di sini.
Jadi untuk mengilustrasikan poin Anda, mari kita gunakan tabel - Saya akan menggunakan tabel Users dari dump data Stack Overflow , dan jalankan kueri ini:
SELECT * FROM dbo.Users ORDER BY DisplayName;
Secara default, tidak ada indeks pada bidang DisplayName, jadi SQL Server harus memindai seluruh tabel, lalu mengurutkannya dengan DisplayName. Inilah rencana pelaksanaannya :
Ini tidak cantik - itu banyak pekerjaan, dengan perkiraan biaya subtree sekitar 30rb. (Anda dapat melihatnya dengan mengarahkan mouse ke operator pilih di PasteThePlan.) Jadi apa yang terjadi jika kita hanya ingin baris 100-200? Kita bisa menggunakan sintaks ini di SQL Server 2012+:
SELECT * FROM dbo.Users ORDER BY DisplayName OFFSET 100 ROWS FETCH NEXT 100 ROWS ONLY;
Rencana pelaksanaannya juga sangat jelek:
SQL Server masih memindai seluruh tabel untuk membangun daftar yang diurutkan hanya untuk memberi Anda baris 100-200, dan biayanya masih sekitar 30k. Lebih buruk lagi, seluruh daftar ini akan dibangun kembali setiap kali kueri Anda berjalan (karena bagaimanapun, seseorang mungkin telah mengubah DisplayName mereka.)
Untuk membuatnya berjalan lebih cepat, kita dapat membuat indeks nonclustered pada DisplayName, yang merupakan salinan tabel kami, diurutkan berdasarkan bidang tertentu:
CREATE INDEX IX_DisplayName ON dbo.Users(DisplayName);
Dengan indeks itu, rencana eksekusi permintaan kami sekarang melakukan pencarian indeks:
Kueri selesai secara instan dan diperkirakan memiliki biaya subtree hanya 0,66 (dibandingkan dengan 30k).
Singkatnya, jika Anda mengatur data dengan cara yang mendukung kueri yang sering Anda jalankan, maka ya, SQL Server bisa mengambil jalan pintas untuk membuat kueri Anda berjalan lebih cepat. Jika, di sisi lain, yang Anda miliki hanyalah tumpukan atau indeks berkerumun, Anda kacau.