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

Rafael | SGBR Sistemas | rafael em sgbr.com.br
Seg Fev 4 17:29:59 -03 2013


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

 




Mais detalhes sobre a lista de discussão lista