Los planes han ido mejorando con cada versión de firebird. Hay que tener cuidado porque puede haber diferencias abismales entre unos y otros, obviamente, en cuanto a velocidad de proceso.
Normalmente, cuando encuentro alguna sentencia que tarda más de la cuenta, la analizo con IBPlanAnalizer (un poco obsoleto, pero muy efectivo) hasta encontrar el "punto" de mejor rendimiento, normalmente añadiendo o cambiando índices.
Desde hace años tengo una opción en "utilidades" para recalcular los índices, viene a ser lo mismo que has escrito,
Al.
Código Delphi
[-]
procedure TfrmRecalcularPlanes.btAceptarClick(Sender: TObject);
begin
if MensajeConfirmacion('Desea recalcular las estadsticas de uso de índices?' ) <> mrYes then
exit;
btAceptar.Enabled := false;
btCancelar.Enabled := false;
try
with qrConsulta do
begin
Close;
SelectSQL.Text := 'Select * from RDB$INDICES where RDB$STATISTICS is not null';
Open;
Last;
pbProgreso.Max := qrConsulta.RecordCount;
First;
end;
while not qrConsulta.Eof do
begin
qrSql.Close;
qrSql.Sql.Text := 'Set statistics index '+qrConsulta.FieldByName('RDB$INDEX_NAME').AsString;
qrSql.ExecQuery;
qrConsulta.Next;
pbProgreso.StepIt;
end;
finally
pbProgreso.Position := 0;
btCancelar.Enabled := true;
end;
MensajeInformacion('Proceso concluido');
close;
end;
El IBPlanAnalizer está
aquí.