[firebase-br] Ordenar depois de filtrar... Somente via especificação explicita da PLAN?
Fernando Reis Guimarães
fernandobhz em gmail.com
Qui Jan 4 18:05:22 -03 2007
Olá pessoal.
A algum tempo atras tive um problema de performance com order by juntamente
com joins...
O negocio e que o firebird gerava um plano para primeiro ordernar e depois
fazer o join...
Resolvi isso utilizando a PLAN gerada sem o order by para quando utilizava o
order by....
PERGUNTO:
Existe alguma maneiro de dizer ao servidor firebird para seguir um caminho
para fazer o plano e não outro...
PORQUE:
Hoje meu plano está assim:
PLAN JOIN (V_CMI CLL INDEX (C2H_CLL_MEDIDOR), V_CMI CMI INDEX (PK_C2H_CMI))
Esse plano é executado com 15ms, mas tenho que especificalo
Sem especificar o plano gerado é:
PLAN JOIN (V_CMI CLL ORDER C2H_CLL_MESANO INDEX (C2H_CLL_MEDIDOR), V_CMI CMI
INDEX (PK_C2H_CMI))
E esse plano é bem pior que o outro, ele demora mais de 1 s
Ficou confuso?
A SQL é :
select
CASE (Extract(Month from MesAno))
WHEN 1 THEN '01/' || (Extract(Year from MesAno))
WHEN 2 THEN '02/' || (Extract(Year from MesAno))
WHEN 3 THEN '03/' || (Extract(Year from MesAno))
WHEN 4 THEN '04/' || (Extract(Year from MesAno))
WHEN 5 THEN '05/' || (Extract(Year from MesAno))
WHEN 6 THEN '06/' || (Extract(Year from MesAno))
WHEN 7 THEN '07/' || (Extract(Year from MesAno))
WHEN 8 THEN '08/' || (Extract(Year from MesAno))
WHEN 9 THEN '09/' || (Extract(Year from MesAno))
WHEN 10 THEN '10/' || (Extract(Year from MesAno))
WHEN 11 THEN '11/' || (Extract(Year from MesAno))
WHEN 12 THEN '12/' || (Extract(Year from MesAno))
ELSE '00/' || (Extract(Year from MesAno))
END MesByYear,
LEITURA,
OC1,
CONSUMO,
SUBSTRING(((INDICE-1)*100) FROM 1 FOR 4) || '%' INDICE,
LEITURISTA,
SITUACAO,
ENDERECO,
codcll,
substring(REFERENCIA from 1 for 5) || '-' ||
substring(REFERENCIA from 6 for 2) || '-' ||
substring(REFERENCIA from 8 for 2) || '-' ||
substring(REFERENCIA from 10 for 4) || '-' ||
substring(REFERENCIA from 14 for 1) Referencia,
Referencia CodRef,
MEDIDOR,
MESANO,
NOME
from v_cmi
where medidor = :medidor
--
Atenciosamente,
Fernando Reis Guimarães.
Contatos
fernando em fernandobhz.com
http://www.fernandobhz.com
Celular 9213-3727.
Mais detalhes sobre a lista de discussão lista