Array
(
)

Aumentar performance da query

Dgsfilho
   - 11 jul 2006

Tenho uma tabela ATENDIMENTO num banco de dados SQLServer, mas depois de algum tempo (muito tempo), a consulta ficou demorada devido a enorme quantidade de dados. Gostaria de saber qual a melhor forma de aumentar a velocidade da consulta a esses dados.
Abaixo o comando SQL que faz a consulta:
#Código


SELECT A.*, C.FANCONV, P.NOMPAC, P.RGPAC, P.ENDPAC,
P.BAIPAC ,P.CIDPAC, P.ESTPAC, P.CEPPAC, P.TELPAC,
P.CIVPAC, P.SEXPAC, P.PROFPAC, P.DATENAS
FROM ATENDIMENTO A, CONVENIO C , PACIENTE P
WHERE A.CODPAC = P.CODPAC AND A.CODCONV= C.CODCONV


Osb.: O sistema utiliza o BDE para se comunicar com a base de dados.

Alguém tem alguma sugestão de como diminuir o tempo de resposta nas consultas?


Sremulador
   - 11 jul 2006

você pode criar indices de maior precissão, se possivel fazer a conexão de modo nativo!


Aroldo Zanela
   - 11 jul 2006

Colega,

Use o Query Analyzer e verifique onde ocorre ´table scan´ e crie índices para essas associações. Troque o mecanismo de conexão para ADO.


Rodc
   - 12 jul 2006

Teste se o código abaixo melhora alguma coisa. Apenas como teste:
#Código

SELECT  A.*,  C.FANCONV,  P.NOMPAC, P.RGPAC, P.ENDPAC, 
P.BAIPAC ,P.CIDPAC, P.ESTPAC, P.CEPPAC, P.TELPAC,
P.CIVPAC, P.SEXPAC, P.PROFPAC, P.DATENAS
FROM PACIENTE P, CONVENIO C, ATENDIMENTO A
WHERE A.CODPAC = P.CODPAC AND A.CODCONV= C.CODCONV



Dgsfilho
   - 13 jul 2006

rodc qual a diferença? Em que vai melhorar o código?


Rodc
   - 14 jul 2006

No Oracle, não sei se nos outros também, a sequencia das tabelas na cláusula FROM e a sequencia das condições na cláusula WHERE fazem diferença na velocidade. Se não me engano a cláusula WHERE é resolvida pelo banco de fora para dentro, sendo assim, as condições mais significativas devem vir por último na cláusula.
Como eu nunca me lembro qual é a condição melhor, sempre faço testes trocando as tabelas e as condições de posição para ver qual fica melhor.