Gönderdiğiniz sorguda:
select * from <table_name>;
100.-200. sıralar diye bir şey yoktur, çünkü bir ORDER BY belirtmezsiniz. Bir sürü ilginç nedenden dolayı SİPARİŞİ dahil etmedikçe sipariş garanti edilmez, ancak bu gerçekten önemli değildir.
Yani, noktanızı göstermek için bir tablo kullanalım - Yığın Taşması veri dökümünden Kullanıcılar tablosunu kullanacağım ve bu sorguyu çalıştıracağım:
SELECT * FROM dbo.Users ORDER BY DisplayName;
Varsayılan olarak, DisplayName alanında dizin yoktur, bu nedenle SQL Server'ın tüm tabloyu taraması ve DisplayName'e göre sıralaması gerekir. Uygulama planı :
Güzel değil - yaklaşık 30k tahmini bir alt ağaç maliyeti ile bu çok iş. (Farenizi PasteThePlan'da seçme operatörünün üzerine getirerek görebilirsiniz.) Peki sadece 100-200 satırlarını istiyorsak ne olur? Bu sözdizimini SQL Server 2012 ve sonrasında kullanabiliriz:
SELECT * FROM dbo.Users ORDER BY DisplayName OFFSET 100 ROWS FETCH NEXT 100 ROWS ONLY;
Bununla ilgili yürütme planı da oldukça çirkin:
SQL Server, sıralı listeyi oluşturmak için hala tüm tabloyu tarar ve size 100-200 satırlarınızı verir ve maliyet hala 30k civarındadır. Daha da kötüsü, bu tüm liste sorgunuz her çalıştırıldığında yeniden oluşturulacaktır (çünkü sonuçta birisi DisplayName'ini değiştirmiş olabilir.)
Daha hızlı gitmek için, tablonuzun bir kopyası olan DisplayName'de bu alana göre sıralanmış kümelenmemiş bir dizin oluşturabiliriz:
CREATE INDEX IX_DisplayName ON dbo.Users(DisplayName);
Bu dizinle, sorgumuzun yürütme planı artık bir dizin arıyor:
Sorgu anında tamamlanır ve tahmini alt ağaç maliyeti yalnızca 0,66'dır (30k yerine).
Özetle, verileri sık sık çalıştırdığınız sorguları destekleyecek şekilde düzenlerseniz, evet, SQL Server sorgularınızı daha hızlı hale getirmek için kısayollar alabilir. Öte yandan, tüm sahip olduğunuz yığınlar veya kümelenmiş dizinler varsa, mahvoldunuz.