[firebase-br] RES: RES: RES: Select demorado em tabela com 3 milhoes de registros

Felix - SOL Informática felix em solsistemas.com
Seg Fev 4 22:34:16 -03 2013


Rafael, são vários os caminhos a depender da situação:

1. Apresentar o cadastro do cliente: select * from tabela where codigo = xyz
--> e mostrar apenas 1 registro, não precisa de todos;
2. Mostrar em um grid TODOS os registros. Faça um select do tipo codigo
between 1 and 25 e incremente os valores a cada 'click' no botão 'próximos';
3. Montar um relatório de todos os clientes cadastrados - não tem muito
jeito, já que será um select sem condições; mas poderá trazer apenas os
campos necessários na impressão; você pode até colocar a query dentro de uma
thread e 'agendar' a apresentação do relatório quando finalizar o processo,
assim o usuário tem a opção de ir fazendo outras coisas até o processo
completar;
4. Calcular uma estatística em que precise calcular sobre a ficha cadastral
- exemplo, um gráfico de participação por campanha - e isso também pode
demorar; siga o mesmo caminho do item 3.

Na sua pergunta inicial você postou a estrutura da tabela e o número de
registros, mas não a situação em que ocorre a lentidão.

Lembrando que, mesmo com um servidor super hiper extra potente, a rede
poderá ser um gargalho na hora de receber 3.000.000 de registros.

Espero ter ajudado mais que atrapalhado e qualquer coisa pergunta de novo.

Francisco Felix
www.solsistemas.com


-----Mensagem original-----
De: lista [mailto:lista-bounces em firebase.com.br] Em nome de Rafael | SGBR
Sistemas |
Enviada em: segunda-feira, 4 de fevereiro de 2013 21:07
Para: 'FireBase'
Assunto: [firebase-br] RES: RES: Select demorado em tabela com 3 milhoes de
registros
Prioridade: Alta
Sensibilidade: Confidencial

Certo, mas em casos que realmente precise, não tem como fazer alguma
"mágica"?
Rafa

-----Mensagem original-----
De: lista [mailto:lista-bounces em firebase.com.br] Em nome de Felix - SOL
Informática Enviada em: segunda-feira, 4 de fevereiro de 2013 19:13
Para: 'FireBase'
Assunto: [firebase-br] RES: Select demorado em tabela com 3 milhoes de
registros
Sensibilidade: Confidencial

3.000.000, todos os campos, toda a tabela (sem filtros) e era para ser
rápido? 

Refaça as querys e traga da base somente o necessário - não tem mágica ;-)

Francisco Felix
www.solsistemas.com

-----Mensagem original-----
De: lista [mailto:lista-bounces em firebase.com.br] Em nome de Rafael | SGBR
Sistemas | Enviada em: segunda-feira, 4 de fevereiro de 2013 16:30
Para: FireBase
Assunto: [firebase-br] Select demorado em tabela com 3 milhoes de registros
Prioridade: Alta
Sensibilidade: Confidencial

Bom dia pessoal, estou com um problema pra resolver, tem um cliente meu que
faz tempo que reclama de lentidão no sistema, eu sempre me desviava dizendo
que era problema de maquina e tal, até que resolvi ir ver oque estava
acontecendo, ocorre que o cara tem mais de 3 milhões de registros em uma
tabela, fiz um select: Select * from tcadastrocliente por dentro do
iboconsole, e o resultado é 32 segundos pra mostrar na tela 3.167.763
registros. Por isso ele reclama, me imagino dando soco no computador pra ele
ir mais rápido kkk, bom a coisa é séria, e venho pedir a ajuda dos colegas
que conhecem mais que eu, a estrutura da tabela segue abaixo:

 

/* Table: TCADASTROCLIENTE, Owner: SYSDBA */

 

CREATE TABLE "TCADASTROCLIENTE" 

(

  "CONTROLE"   INTEGER,

  "DATACADASTRO"       DATE,

  "DATAULTIMOENVIO"               DATE,

  "QTDENVIADOS"           INTEGER,

  "ARQUIVOENVIADO"  VARCHAR(500),

  "CODIGOGRUPO"         INTEGER NOT NULL,

  "GRUPO"          VARCHAR(100) NOT NULL,

  "CAMPANHA"                VARCHAR(500),

  "FONE1"            VARCHAR(50),

  "FONE2"            VARCHAR(50),

  "HORAENVIO"                TIME,

  "EMAIL"            VARCHAR(100),

  "CLIENTE"         VARCHAR(100),

  "CODULTIMACAMPANHA"      INTEGER,

  "CODIGOFILIAL"            INTEGER NOT NULL,

  "HORACADASTRO"       TIME NOT NULL,

  "DATANASCIMENTO" DATE,

  "REJEITADO"   VARCHAR(3),

  "ANIVERSARIOENVIADO"         VARCHAR(50),

  "QTDERETORNADOS"  INTEGER NOT NULL,

  "CLIENTECOMPROU"  VARCHAR(3),

CONSTRAINT "PK_TCADASTROCLIENTE" PRIMARY KEY ("CONTROLE")

);

SET TERM ^ ;

 

 

/* Triggers only will work for SQL triggers */

 

CREATE TRIGGER "TCADASTROCLIENTE_BI" FOR "TCADASTROCLIENTE" 

ACTIVE BEFORE INSERT POSITION 0

AS

BEGIN

  IF (NEW.CONTROLE IS NULL) THEN

    NEW.CONTROLE = GEN_ID(GEN_TCADASTROCLIENTE_ID,1);

END

^

 

CREATE TRIGGER "TCADASTROCLIENTE_BIU0" FOR "TCADASTROCLIENTE" 

ACTIVE BEFORE INSERT OR UPDATE POSITION 0

AS

begin

  /* Trigger text */

  if (new.qtderetornados is null) then

    new.qtderetornados = 0;

end

^

 

COMMIT WORK ^

SET TERM ;^

 

Oque eu posso fazer pra melhorar esse select?

Obrigado desse já pela ajuda.

Rafa

 

______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br Para
saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa


______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br Para
saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa


______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br Para
saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa





Mais detalhes sobre a lista de discussão lista