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.