[firebase-br] Problemas com desempenho em query na versão 2.1

Rodrigo Teodoro teodoro_rodrigo em ig.com.br
Qui Abr 29 10:15:58 -03 2010


Opa! Elton,

Na verdade deu um trabalho do cão montar esta query. Ela foi feita a mão 
partindo da regra comercial que seria aplicada. A regra comercial é um 
pouco complexa mesmo, claro que sem o conhecimento do banco fica 
complicado entender os relacionamentos.

Os campos desnecessários irei eliminar e melhorá-la agora que tenho 
tempo. O meu banco de dados não é específico para uma regra de negócios. 
Ele serve para vários sistemas semelhantes, logo, algumas coisas as 
vezes não ficam tão bacanas quanto deveriam.

No caso, eu postei o meu problema no Firebird Tracker ontem e o Dmitry 
apontou o erro e o motivo de ocorrer nas versões mais novas do Firebird.

Segue:

Your problem is that the following condition:

   P.GRUPOSUBSORTIMENTO = DESCONTOS.CODGRUPOSUBSORTIMENTODESCONTO

cannot use an index in the modern Firebird versions, because values are 
of different data types. P.GRUPOSUBSORTIMENTO is varchar(6) while 
GD.CODGRUPOSUBSORTIMENTODESCONTO is integer.

This is an intended behavior, not a bug. So you may either change your 
metadata or rewrite the problematic query using CAST:

   P.GRUPOSUBSORTIMENTO = CAST(DESCONTOS.CODGRUPOSUBSORTIMENTODESCONTO 
AS VARCHAR(6))

A condição correta seria: (P.GRUPOSUBSORTIMENTO = 
DESCONTOS.GRUPOSUBSORTIMENTO AND DESCONTOS.DESCGRUPO > 0)

Como pude deixar passar isto! :( Quando eu refiz a query e ficou mais 
rápida nem notei, já que os campos são bem parecidos.

O desempenho da query acertada foi a abaixo, ou seja, voltou ao normal 
como na versão 2.0.

------ Info. Desempenho ------
Tempo de Preparação = 0ms
Tempo de Execução = 62ms
Tempo Médio Leitura = 1,77 ms
Memória Actual = 9.185.024
Memória Max = 10.488.444
Buffers de Memória = 2.048
Leituras do disco para a Memória Intermédia = 193
Escritas da Memória Intermédia para o disco = 0
Leituras da Memória Intermédia = 21.049


Com licença, vou pro canto chorar de raiva!








Mais detalhes sobre a lista de discussão lista