Firebird lento ao realizar buscas sem PK

Firebird

Firebase

13/05/2024

Caros, boa noite

Possuo um banco de dados Firebird em um cliente que possuia as mesmas informações em um BD SQL, realizei a migração das informações para o Firebird seguindo o seguinte processo:
Criei as tabelas usando um script que gerei usando como base a estrutura do SQL, porém inicialmente sem PK, FK e Indices
Realizei o input das informações em lotes de 9999 no banco de dados
Realizei a criação dos indices + PK + FK

Essa mesma base possuo em outros clientes com quantidade similares de informações e as mesmas performam bem ao realizar um select na tabela sem usar os campos chave e/ou indices no where ( Não é igual usar um indice mas tbm responde rapido e eles não foram oriundos de um input em lote, foram inseridos manualmente conforme o uso no dia a dia ), porém após essa migração das informações qualquer select com where simples como um "where 1=2" demora alguns segundos para responder, alguem sabe o que eu poderia fazer para corrigir esse problema?

Pensei em algo sobre organização de paginação ou algo do tipo por conta do input em massa de cerca de 300 tabelas, já realizei backup e restore eliminando os Garbage mas nada feito

Versão do Firebird: 3.0.11
Versão do Windows: Windows Server 2016 Standard

Obrigado pela atenção
Felipe Cirqueira

Felipe Cirqueira

Curtidas 0

Respostas

Arthur Heinrich

Arthur Heinrich

13/05/2024

Quando as tabelas não possuem os índices necessários, o banco precisa executar um full table scan para encontrar as informações. Quanto maior a tabela, mais demorado será. Se as queries tiverem joins, pior ainda. O banco fará full table scan em todas as tabelas, terá que ordenar os dados e então, realizar um merge.

A solução é criar os índices e garantir que as consultas possuam filtros eficientes.
GOSTEI 0
POSTAR