Op donderdag 31 januari 2002 09:09 schreef KoekenBoes het volgende:
[..]
Is idd een oplossing, maar niet de meest optimale... Stel dat je recordset 5000 t/m 5050 wilt hebben, selecteer je er 5000 voor niks.
Die moeten ALTIJD worden gefetched! De engine weet anders niet wat het 5001e record is. Dus het maakt qua performance geen moer uit. SQLServer bepaalt eerst de keys van de te fetchen rows en daarna pas de rows, kijk maar naar die execution plans

In mysql kan je bijv de volgende query uitvoeren:
select * from table limit 50, 100 (of 100, 50; weet het ff niet meer)
En die returnt resultaat 50 t/m 100 terug... In sql-server zit die optie blijkbaar niet en moet je met ingewikkelde subquery's gaan werken
Het zou me niets verbazen als MySQL dit deed:
- Creeer temptable met hetzelfde format als resultset + 1 keyfield extra, die op 0 begint en oploopt (identity)
- Insert de complete resultset in die temptable
- select rows uit die temptable mbv het extra keyfield.
- kegel de temptable weg.
Hetgeen je ook in SQLServer kunt doen. Je kunt dus een temptable maken met daarin de keys voor je rows + een identity field. En select daaruit je subset. Omdat een temptable blijft bestaan per connectie kun je dit gebruiken voor je searchresultpage (dus elke keer een subset uit die temptable selecten), want daar is dit voor neem ik aan?