[mssql] paging

Pagina: 1
Acties:

  • Tinuske
  • Registratie: September 2002
  • Laatst online: 08-02 20:43
In de zoektoch naar een goede paging functie ben ik al vaak stuk gelopen
(aantal records = 10000)

temptables -> te traag ( duur 7 sec ofzo)
top functie -> ondersteunt geen distinct
rowcount -> sortering niet mogelijk op niet-unieke koloms

De topfunctie werkt nu nog het snelste
code:
1
2
3
4
5
6
7
(
  'SELECT' + @fields + ' FROM ' + @tables + ' WHERE ' + @PrimaryKey + ' IN
    (SELECT ' + @primarykey + ' TOP ' + @SizeString + ' ' + @PrimaryKey + ' FROM ' + @Tables + ' WHERE ' + @QueryFilter + ' AND ' + @PrimaryKey + ' NOT IN
      (SELECT ' + @primarykey + ' TOP ' + @PrevString + ' ' + @PrimaryKey + ' FROM ' + @Tables + ' WHERE ' + @QueryFilter + ' ORDER BY ' + @SortField + ' ' + @SortOrder  +   ')
    ORDER BY ' + @SortField +' ' + @SortOrder + ')' + @SortOrder + ',' + @primarykey + '
  ORDER BY ' + @SortField + ' ' + @SortOrder + ',' + @primarykey
  )

Echter in de @fields, zit een distinct , welke niet in de subquery's zit en daardoor te weinig records teruggeeft. (bijvoorbeeld 15 records, als de pagesize 20 is)

Iemand een oplossing hiervoor ?

  • Database freak
  • Registratie: Oktober 1999
  • Laatst online: 21-01 12:56
Probeer het eens met een script en de Table variable waarmee je in een variabele een hele tabel kan plaatsen. Dit doet MSSQL in het geheugen waardoor je geen disk i/o penalty krijgt zoals met temdb tabellen.

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Database freak schreef op dinsdag 18 januari 2005 @ 12:58:
Probeer het eens met een script en de Table variable waarmee je in een variabele een hele tabel kan plaatsen. Dit doet MSSQL in het geheugen waardoor je geen disk i/o penalty krijgt zoals met temdb tabellen.
Op zich een goed idee, behalve als de tabellen te groot worden, ook dan zal hij swappen naar de tempdb.

Oops! Google Chrome could not find www.rijks%20museum.nl