Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

walter_júnior

montar uma paginação.

Recommended Posts

Bom dia,

 

Sou leigo ainda em banco de dados e estou tentando montar uma paginação pelo SQL. O Problema é o seguinte, a paginação sendo realizada pelo aplicativo em C#, pelo Visual Studio 2008 + LINQ + nHibernate, porém essa paginação está com um problema de performance quando se trata de buscar os ultimos registros da tabela, então estou tentando montar a paginação pelo SQL utilizando Views, mas mexo com SQL a pouco tempo, e procurei pelo Fórum algumas coisas mas não consegui realizar a paginação.

 

Esse é o código que o nHibernate gera, e apresenta problemas de performance:

 

SELECT TOP (50) y0_, 
                y1_, 
                y2_, 
                y3_, 
                y4_, 
                y5_, 
                y6_, 
                y7_, 
                y8_, 
                y9_, 
                y10_, 
                y11_, 
                y12_, 
                y13_, 
                y14_, 
                y15_, 
                y16_, 
                y17_, 
                y18_, 
                y19_, 
                y20_, 
                y21_, 
                y22_, 
                y23_, 
                y24_, 
                y25_, 
                y26_, 
                y27_, 
                y28_, 
                y29_, 
                y30_, 
                y31_, 
                y32_, 
                y33_, 
                y34_, 
                y35_, 
                y36_, 
                y37_, 
                y38_, 
                y39_, 
                y40_, 
                y41_, 
                y42_, 
                y43_, 
                y44_, 
                y45_, 
                y46_, 
                y47_, 
                y48_, 
                y49_, 
                y50_, 
                y51_, 
                y52_, 
                y53_, 
                y54_, 
                y55_, 
                y56_, 
                y57_, 
                y58_, 
                y59_, 
                y60_, 
                y61_, 
                y62_, 
                y63_, 
                y64_, 
                y65_, 
                y66_, 
                y67_, 
                y68_, 
                y69_, 
                y70_, 
                y71_, 
                y72_, 
                y73_, 
                y74_, 
                y75_, 
                y76_, 
                y77_, 
                y78_, 
                y79_, 
                y80_, 
                y81_, 
                y82_, 
                y83_, 
                y84_, 
                y85_, 
                y86_, 
                y87_ 
FROM   (SELECT this_.audit_datetime                       AS y0_, 
              this_.audit_tablestatus                    AS y1_, 
              this_.audit_user                           AS y2_, 
              this_.audit_version                        AS y3_, 
              this_.codpedidoweb                         AS y4_, 
              this_.codusuarioadm                        AS y5_, 
              this_.codusuarioarm                        AS y6_, 
              contrato1_.idcontrato                      AS y7_, 
              cliente2_.nomcliente                       AS y8_, 
              cliente2_.idcliente                        AS y9_, 
              cliente2_.nomabreviado                     AS y10_, 
              filial3_.idfilial                          AS y11_, 
              filial3_.nomfilial                         AS y12_, 
              filial3_.codfilial                         AS y13_, 
              contrato1_.flgativo                        AS y14_, 
              this_.idpedido                             AS y15_, 
              this_.codcliente                           AS y16_, 
              this_.datcancelamento                      AS y17_, 
              this_.datfaturamento                       AS y18_, 
              this_.datgeracao                           AS y19_, 
              this_.datleituraadm                        AS y20_, 
              this_.datleituraarm                        AS y21_, 
              this_.datpedido                            AS y22_, 
              this_.flgcancelafaturamento                AS y23_, 
              this_.flgcancelaromaneio                   AS y24_, 
              this_.flgfaturado                          AS y25_, 
              this_.flgromaneiofaturado                  AS y26_, 
              this_.flgcriadoautomaticamente             AS y27_, 
              this_.flgsolicitacaourgente                AS y28_, 
              this_.idprefaturamento                     AS y29_, 
              this_.numsequencia                         AS y30_, 
              romaneio4_.idromaneio                      AS y31_, 
              this_.txtcomplemento                       AS y32_, 
              this_.txtcpf                               AS y33_, 
              this_.txtdepartamento                      AS y34_, 
              this_.txtempresa                           AS y35_, 
              this_.txtmodelomarca                       AS y36_, 
              this_.txtnome                              AS y37_, 
              this_.txtobservacoes                       AS y38_, 
              this_.typtransporte                        AS y39_, 
              this_.txtmotorista                         AS y40_, 
              this_.txtplacaveiculo                      AS y41_, 
              this_.txttelefone                          AS y42_, 
              this_.txtramal                             AS y43_, 
              this_.txtjustificativacancelamento         AS y44_, 
              this_.typstatuspedido                      AS y45_, 
              this_.valprecoromaneio                     AS y46_, 
              this_.numqtdequivalenciacxs                AS y47_, 
              webusuario5_.idwebusuario                  AS y48_, 
              webusuario5_.codemail                      AS y49_, 
              webusuario5_.nomusuario                    AS y50_, 
              webcentroc6_.nomcentrocusto                AS y51_, 
              webcentroc6_.idwebcentrocusto              AS y52_, 
              webcentroc6_.codcentrocusto                AS y53_, 
              webdeparta7_.nomdepartamento               AS y54_, 
              webdeparta7_.idwebdepartamento             AS y55_, 
              webdeparta7_.coddepartamento               AS y56_, 
              webusuario5_.txtramal                      AS y57_, 
              webusuario5_.txttelefone                   AS y58_, 
              webusuario5_.txtregistrofuncionario        AS y59_, 
              webusuario5_.flgativo                      AS y60_, 
              webcentroc8_.idwebcentrocusto              AS y61_, 
              webcentroc8_.codcentrocusto                AS y62_, 
              webcentroc8_.nomcentrocusto                AS y63_, 
              webdeparta9_.idwebdepartamento             AS y64_, 
              webdeparta9_.nomdepartamento               AS y65_, 
              webdeparta9_.coddepartamento               AS y66_, 
              usuariocri10_.idusuario                    AS y67_, 
              usuariocri10_.codusuario                   AS y68_, 
              usuariocan11_.idusuario                    AS y69_, 
              usuariocan11_.codusuario                   AS y70_, 
              enderecoen12_.idenderecoentregacontrato    AS y71_, 
              enderecoen12_.codenderecocliente           AS y72_, 
              enderecoen12_.txtendereco                  AS y73_, 
              enderecoen12_.txtcep                       AS y74_, 
              enderecoen12_.txtbairro                    AS y75_, 
              zona13_.codzona                            AS y76_, 
              zona13_.deszona                            AS y77_, 
              cidade14_.nomcidade                        AS y78_, 
              unidadefed15_.codunidadefederativa         AS y79_, 
              unidadefed15_.nomunidadefederativa         AS y80_, 
              cidade14_.nomcidadecompleto                AS y81_, 
              cidade14_.idcidade                         AS y82_, 
              pais16_.idpais                             AS y83_, 
              pais16_.codpais                            AS y84_, 
              pais16_.nompais                            AS y85_, 
              subzona17_.codsubzona                      AS y86_, 
              subzona17_.dessubzona                      AS y87_, 
              Row_number() OVER(ORDER BY this_.idpedido) AS 
              __hibernate_sort_row 
       FROM   bcopedido this_ 
              LEFT OUTER JOIN bcousuario usuariocri10_ 
                ON this_.idusuariocriacao = usuariocri10_.idusuario 
              LEFT OUTER JOIN bcousuario usuariocan11_ 
                ON this_.idusuariocancelamento = usuariocan11_.idusuario 
              LEFT OUTER JOIN webcentrocusto webcentroc8_ 
                ON this_.idcentrocustodeb = webcentroc8_.idwebcentrocusto 
              LEFT OUTER JOIN webdepartamento webdeparta9_ 
                ON this_.iddepartamentodeb = webdeparta9_.idwebdepartamento 
              LEFT OUTER JOIN webusuario webusuario5_ 
                ON this_.idwebusuario = webusuario5_.idwebusuario 
              LEFT OUTER JOIN webcentrocusto webcentroc6_ 
                ON webusuario5_.idcentrocusto = webcentroc6_.idwebcentrocusto 
              LEFT OUTER JOIN webdepartamento webdeparta7_ 
                ON webusuario5_.iddepartamento = webdeparta7_.idwebdepartamento 
              LEFT OUTER JOIN bcocontrato contrato1_ 
                ON this_.idcontrato = contrato1_.idcontrato 
              LEFT OUTER JOIN bcofilial filial3_ 
                ON contrato1_.idfilial = filial3_.idfilial 
              LEFT OUTER JOIN bcocliente cliente2_ 
                ON contrato1_.idcliente = cliente2_.idcliente 
              LEFT OUTER JOIN bcoromaneio romaneio4_ 
                ON this_.idromaneio = romaneio4_.idromaneio 
              LEFT OUTER JOIN bcoenderecoentregacontrato enderecoen12_ 
                ON this_.idenderecoentregacontrato = 
                   enderecoen12_.idenderecoentregacontrato 
              LEFT OUTER JOIN bcocidade cidade14_ 
                ON enderecoen12_.idcidade = cidade14_.idcidade 
              LEFT OUTER JOIN bcopais pais16_ 
                ON cidade14_.idpais = pais16_.idpais 
              LEFT OUTER JOIN bcounidadefederativa unidadefed15_ 
                ON cidade14_.idunidadefederativa = 
                   unidadefed15_.idunidadefederativa 
              LEFT OUTER JOIN bcosubzona subzona17_ 
                ON enderecoen12_.idsubzona = subzona17_.idsubzona 
              LEFT OUTER JOIN bcozona zona13_ 
                ON enderecoen12_.idzona = zona13_.idzona) AS QUERY 
WHERE  QUERY.__hibernate_sort_row > 99950
ORDER  BY QUERY.__hibernate_sort_row; 

 

 

 

Com essa consulta, para se obter a posição 150.000 por exemplo, demora em torno de 5 segundos pela aplicação, 4s no SQL Server.

 

Essa é a consulta da view que comecei a fazer porém não consegui avançar ainda:

 

SELECT     TOP (50)
             (SELECT     COUNT(idPedido) AS Expr1
		   FROM          dbo.bcoPedidoServico AS T2
              WHERE      (idPedido <= ped.idPedido)) AS Pos, ped.idPedido, serv.desServico AS nomServiço, webu.nomUsuario AS nomSolicitante, 
					   eec.codEnderecoCliente AS txtEndEntrega, cli.nomCliente, ped.idContrato, webd.nomDepartamento AS txtDepartamentoUsu, 
                          webcc.nomCentrocusto AS txtCentroCustoUsuario
FROM      dbo.bcoPedidoServico AS ps INNER JOIN
         dbo.bcoPedido AS ped ON ps.idPedido = ped.idPedido INNER JOIN
         dbo.bcoServico AS serv ON serv.idServico = ps.idServico INNER JOIN
         dbo.bcoContrato AS c ON ped.idContrato = c.idContrato INNER JOIN
         dbo.webUsuario AS webu ON ped.idWebUsuario = webu.idWebUsuario INNER JOIN
         dbo.bcoEnderecoEntregaContrato AS eec ON ped.idEnderecoEntregaContrato = eec.idEnderecoEntregaContrato INNER JOIN
         dbo.bcoCliente AS cli ON c.idCliente = cli.idCliente INNER JOIN
         dbo.webDepartamento AS webd ON webu.idDepartamento = webd.idWebDepartamento INNER JOIN
         dbo.webCentroCusto AS webcc ON webu.idCentrocusto = webcc.idWebCentroCusto

 

 

Agradeço a atenção

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta usar este exemplo na sua estrutura:

 

http://forum.imasters.com.br/topic/323465-clausula-semelhante-ao-limit-do-mysql/

 

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.