Fórum tabela_grande_lentidao #24662

10/03/2010

0

Eu tenho uma consulta sql que esta meio lenta. Possuo uma tabela de exames que é muito grande, e apara calcular o vencimento de alguns exames preciso fazer varios join, pois os exames dependem do sexo, o tipo de aso estas coisas. Se eu conseguisse isolar da tabela somente os exames que a pessoa com codigo 1 fez, ficaria mais rápido.
Isolar antes de executar o sql, assim na hora de percorrer os registros, eu percorreria somente da pessoa 1.
Eu li que na versao do fire 2.1 ja possui os recursos de tabela temporarias, mas eu uso uma aplicacaçao 3 camadas, se eu fizer isto vou ter que fazer comandos para o fire e para o oracle, pois trabalho com estes dois bancos no mesmo sistema.
 Eu poderia fazer uma estore procedure, mas tambem nao quero, pois eu ficaria preso ao banco.
Tem alguma coisa que posso fazer.
Jose Boas

Jose Boas

Responder

Posts

11/03/2010

Wesley Yamazack

Olá amigo,
   Sua tabela é grande e tudo mais, porém como esta a estrutura dela ? Você tem indices nela ? Os campos que você faz os Joins, não poderiam ser indexados ?
   Se quiser mandar a estrutura da tabela derrepente fica mais facil de analisar.

Um abraço

Wesley Y
Responder

Gostei + 0

11/03/2010

Jose Boas

Eu não criei índices, pelo fato de ser novo nesta estrutura de 3 camadas e como o banco é um mero repositório de dados fiquei na dúvida. Mesmo utilizando diferentes bancos nao tem problema e criar índices ? 
Responder

Gostei + 0

11/03/2010

Jose Boas

Estou mandando para você as estruturas das tabelas envolvidas.Se preferir posso mandar o comando sql, mas se for mudar o comando sql ai complica, pois este comando  funciona a algum tempo e foi difícil chegar no resultado, mesmo porque não tenho muito tempo para finalizar o projeto, no máximo até o final deste mês

CREATE TABLE EXAME_COMPLEMENTAR (
    CODPESSOA         INTEGER NOT NULL,
    DATA              DATE NOT NULL,
    CODEXAME          INTEGER NOT NULL,
    RESULTADO_EXAME   VARCHAR(2000),
    SITUACAO          INTEGER,
    CODLABORATORIO    INTEGER,
    BLOQ              CHAR(1),
    RESPONSAVEL       VARCHAR(40),
    CODIGO            FLOAT,
    IMAGEM            CHAR(1),
    CAMINHO_IMG       VARCHAR(80),
    CODUSU            INTEGER,
    DATA_ATUALIZACAO  DATE,
    CODSOLIC          FLOAT
);

CREATE TABLE EMPRESA_FUNCAO_SETOR_EXAME (
    CODEMPRESA        INTEGER NOT NULL,
    CODFUNCAO         INTEGER NOT NULL,
    CODSETOR          INTEGER NOT NULL,
    CODEXAME          INTEGER NOT NULL,
    IDADE_MIM         SMALLINT,
    IDADE_MAX         SMALLINT,
    ADMISSIONAL       VARCHAR(3),
    PERIODO           SMALLINT,
    DEMISSIONAL       VARCHAR(3),
    OCUPACIONAL       CHAR(3),
    PERIODICO         VARCHAR(3),
    BLOQ              CHAR(1),
    ORIGEM            INTEGER,
    CODEMPORIGEM      INTEGER,
    CODSETORIGEM      INTEGER,
    FLAG              CHAR(1),
    CODEMPORIGEM_ANT  INTEGER,
    CODSETORIGEM_ANT  INTEGER,
    ORIGEM_ANT        INTEGER
);
CREATE TABLE EMPRESA_FUNCAO_SETOR_ASO (
    CODEMPRESA     INTEGER NOT NULL,
    CODFUNCAO      INTEGER NOT NULL,
    CODSETOR       INTEGER NOT NULL,
    PERIODO        INTEGER,
    RECOMENDACOES  VARCHAR(100),
    DEMISSIONAL    SMALLINT,
    BLOQ           CHAR(1)
);
CREATE TABLE PESSOAS (
    CODIGO         INTEGER NOT NULL,
    NOME           VARCHAR(40),
    CTPS           VARCHAR(17),
    IDENTIDADE     VARCHAR(15),
    CPF            VARCHAR(15),
    PIS            VARCHAR(15),
    URLFOTO        VARCHAR(100),
    ENDER          VARCHAR(40),
    CODCID         INTEGER,
    FONE1          VARCHAR(15),
    FONE2          VARCHAR(15),
    EMAIL          VARCHAR(40),
    CODGINSTRUCAO  SMALLINT,
    ESTUDA         SMALLINT,
    NASCIMENTO     DATE,
    SEXO           SMALLINT,
    CODCIDNAT      INTEGER,
    CODESTCIVIL    SMALLINT,
    OBS            VARCHAR(2000),
    TPSANGUE       VARCHAR(40),
    CODDEFI        INTEGER,
    DEFI           SMALLINT,
    STATUS         SMALLINT,
    PDE            SMALLINT,
    BLOQ           CHAR(1),
    BAIRRO         VARCHAR(40),
    COMPLEMENTO    VARCHAR(40),
    CEP            VARCHAR(12)
);

Responder

Gostei + 0

12/03/2010

Wesley Yamazack

Olá amigo,
   O lance de ser em 3 camadas, não depende do banco de dados, sacou ? O desempenho do banco depende unica e exclusivamente dele, obvio que se você puder evitar comandos grandes, filtrar mais os dados, ficar melhor para o desempenho, a criação de indices é importante para o banco poder se organizar melhor na hora de buscar, procure criar indices nos campos que você bota no Where.
  Outra coisa, você esta fazendo todos os joins possíveis certo ? Não ficou faltando nenhum? Existe alguma forma de você buscar os dados mais filtrados ? exemplo idpaciente = 1, depois = 2, e por ai vai ? Evitando trazer uma grande massa de dados.

   Espero te ajudado, estou a disposição

Um abraço

Wesley Y
Responder

Gostei + 0

15/03/2010

Jose Boas

Uma dúvida, quando eu tenho uma chave primária, no caso um número sequencial e posso colocar primary key mesmo ou crio um índice unico.
Responder

Gostei + 0

15/03/2010

Wesley Yamazack

Olá amigo,
  Você pode e deve criar ele como chave primária para manter a integridade do seu banco de dados

Um abraço

Wesley Y
Responder

Gostei + 0

18/03/2010

Wesley Yamazack

Olá amigo, consegui fazer a chave primária ? Tem mais alguma dúvida ? Estou aqui para lhe ajudar no que precisar

Um abraço

Wesley Y
Responder

Gostei + 0

23/03/2010

Wesley Yamazack

Olá amigo, concluimos o chamado, porém se tiver alguma dúvida reabrimos o mesmo.

Att,

Wesley Y
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar