tabela_grande_lentidao
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.
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
Curtidas 0
Respostas
Wesley Yamazack
10/03/2010
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
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
GOSTEI 0
Jose Boas
10/03/2010
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 ?
GOSTEI 0
Jose Boas
10/03/2010
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)
);
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)
);
GOSTEI 0
Wesley Yamazack
10/03/2010
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
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
GOSTEI 0
Jose Boas
10/03/2010
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.
GOSTEI 0
Wesley Yamazack
10/03/2010
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
Você pode e deve criar ele como chave primária para manter a integridade do seu banco de dados
Um abraço
Wesley Y
GOSTEI 0
Wesley Yamazack
10/03/2010
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
Um abraço
Wesley Y
GOSTEI 0
Wesley Yamazack
10/03/2010
Olá amigo, concluimos o chamado, porém se tiver alguma dúvida reabrimos o mesmo.
Att,
Wesley Y
Att,
Wesley Y
GOSTEI 0