15

Ho alcune domande nel quadro del vecchio row_number (SQL Server 2008) e il più recente OFFSET + fetch (SQL Server 2012) meccanismo di paging fornito da SQL Server 2012.Quali sono le differenze tra il numero di riga precedente() e l'impaginazione basata su FETCH OFFSET + più recente in SQL Server?

  1. Quali sono le limitazioni con row_number() ?
  2. OFFSET + FETCH una sostituzione migliorata per row_number()?
  3. Esistono casi d'uso che potrebbero essere sufficienti solo con uno e non con l'altro?
  4. Ci sono differenze di prestazioni tra i due? Se sì, quale è raccomandato?

Grazie.

+2

Avete controllato in giro? Vedi questa risposta piuttosto esauriente: http://dba.stackexchange.com/questions/30210/why-are-there-execution-plan-differences-between-offset-fetch-and-the-old-st –

risposta

13

L'utilizzo di ROW_NUMBER() funziona correttamente: è solo più lavoro del necessario; è necessario scrivere un CTE "scheletro" attorno alla query effettiva, aggiungere la colonna ROW_NUMBER() al set di output e quindi filtrarla.

Utilizzando il nuovo OFFSET/FETCH è più semplice - e sì, è anche meglio per le prestazioni, in quanto questi due link in grado di mostrare:

Nel complesso: se si utilizzando SQL Server 2012 - quindi è necessario sicuramente utilizzare OFFSET/FETCH anziché ROW_NUMBER() per il paging

+0

Questo look abbastanza onesto , ma mi chiedo come posso forzare l'uso degli insiemi EF con il server sql 2012? –

1

secondo questa tecnica articolo 3 di paging confrontare e provocare grafico è utile scegliere il metodo di paginazione

Sql Server 2012 Paging Methods

tutte metodo paging in numero di piccolo record funzionano bene ma quando cresce numero di record dopo ore differenza di scommessa metodi sembra direttamente

Problemi correlati