Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
Carregando comentários...