Após o teste, ao consultar a página 100.000 entre 14483461 registros, com 10 registros por página em ordem crescente e decrescente, o primeiro tempo é de 0,47 segundos e o segundo tempo é de 0,43 segundos. A sintaxe do teste é a seguinte: desenvolvido por vevb.com.
exec GetRecordFromPage notícias,newsid,10.100000
news é o nome da tabela, newsid é o campo-chave, indexe newsid primeiro ao usá-lo.
Copie o código do código da seguinte forma:
/*
Nome da função: GetRecordFromPage
Função: Obtenha os dados da página especificada
Descrição do parâmetro: @tblName nome da tabela que contém dados
Nome do campo-chave @fldName
@PageSize Número de registros por página
@PageIndex O número da página a ser obtida
Tipo de classificação @OrderType, 0 - ordem crescente, 1 - ordem decrescente
Condições de consulta @strWhere (nota: não adicione onde)
Autor: Punho de Ferro
E-mail: [email protected]
Data de criação: 04/07/2006
Tempo de modificação: 04/07/2006
*/
CRIAR PROCEDIMENTO GetRecordFromPage
@tblName varchar(255), -- nome da tabela
@fldName varchar(255), -- nome do campo
@PageSize int = 10, -- tamanho da página
@PageIndex int = 1, -- número da página
@OrderType bit = 0, -- Define o tipo de classificação, valores diferentes de 0 estão em ordem decrescente
@strWhere varchar(2000) = '' -- condições de consulta (nota: não adicione onde)
COMO
declare @strSQL varchar(6000) – instrução principal
declare @strTmp varchar(1000) – variável temporária
declare @strOrder varchar(500) – tipo de classificação
se @OrderType! = 0
começar
set @strTmp = '<(selecione min'
set @strOrder = 'ordenar por [' + @fldName + '] desc'
fim
outro
começar
set @strTmp = '>(selecionar máximo'
set @strOrder = 'ordenar por [' + @fldName +'] asc'
fim
set @strSQL = 'selecione o topo' + str(@PageSize) + ' * de ['
+ @tblName + '] onde [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) de (selecione top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] de [' + @tblName + ']' + @strOrder + ') como tblTmp)'
+ @strOrdem
if @strWhere != ''
set @strSQL = 'selecione o topo' + str(@PageSize) + ' * de ['
+ @tblName + '] onde [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) de (selecione top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] de [' + @tblName + '] onde ' + @strWhere + ' '
+ @strOrder + ') como tblTmp) e ' + @strWhere + ' ' + @strOrder
se @PageIndex = 1
começar
definir @strTmp = ''
if @strWhere != ''
set @strTmp = 'onde (' + @strOnde + ')'
set @strSQL = 'selecione o topo' + str(@PageSize) + ' * de ['
+ @tblName + ']' + @strTmp + ' ' + @strOrder
fim
exec(@strSQL)
IR