[firebase-br] Índice duplicado ao usar Foreign Key

Clayton Alves clayton.aa em gmail.com
Sexta Agosto 4 17:20:16 -03 2023


Realmente, fiz o teste com a seguinte estrutura:

create table pessoa (
  pessoa_id int not null primary key,
  nome varchar(128)
);


create table endereco (
  endereco_id int not null primary key,
  pessoa_id int not null,
  rua varchar(128),
  constraint endereco_pessoa_fk foreign key (pessoa_id)  references pessoa
(pessoa_id)
);


Plano de execução para o select:

select * from pessoa left join endereco using (pessoa_id);


PLAN JOIN (PESSOA NATURAL, ENDERECO INDEX (ENDERECO_PESSOA_FK))


Após dropar o constraint endereco_pessoa_fk, o plano de execução para o
mesmo select:

PLAN JOIN (PESSOA NATURAL, ENDERECO NATURAL)


Pensei que o firebird iria utilizar o índice da tabela "pessoa" mas após
refletir aqui, isso não faz o menor sentido, já que o índice é justamente
para endereçar a página de dados da tabela ao qual ele indexa, e não de
outras tabelas.

Obrigado pela atenção e desculpa a vergonha que passei, rsrsrs.

---

Clayton A. Alves <http://claytonaalves.github.com>

 claytonaalves <https://telegram.me/claytonaalves>
 +55 66 99233-3406

---



Em sex., 4 de ago. de 2023 às 15:49, Carlos H. Cantu via lista <
lista em firebase.com.br> escreveu:

> O índice da FK é criado na tabela B, portanto, não é o mesmo índice e nem
> tem os
> mesmos dados do índice da PK da tabela A.
>
> []s
> Carlos H. Cantu
> eBook Guia de Migração para o FB 4 - www.firebase.com.br/guiafb4.php
> www.FireBase.com.br - www.firebirdnews.org - blog.firebase.com.br
>
> CAvl> Olá lista,
>
> CAvl> Ao criar a TabelaA e definir uma chave primária, é criado um índice
> CAvl> automaticamente para esta chave primária.
>
> CAvl> Ao criar a TabelaB com chave primária E chave estrangeira apontando
> para a
> CAvl> TabelaA, são criados dois índices: um para a chave primária e outro
> para a
> CAvl> chave estrangeira.
>
> CAvl> Pergunto: O índice da chave estrangeira da TabelaB compartilha dados
> com o
> CAvl> índice da TabelaA? Ou realmente são dois índices distintos (porém
> idênticos
> CAvl> em seus dados) duplicando informação no banco de dados ?
>
> CAvl> Tenho esta dúvida pois se realmente os índices são duplicados, em
> alguns
> CAvl> casos não irá compensar manter uma chave estrangeira já que o índice
> da
> CAvl> chave primária já irá ser utilizado de qualquer forma ao fazer um
> select
> CAvl> com a junção entre as duas tabelas.
>
> CAvl> ---
>
> CAvl> Clayton A. Alves <http://claytonaalves.github.com>
>
> CAvl>  claytonaalves <https://telegram.me/claytonaalves>
> CAvl>  +55 66 99233-3406
>
> CAvl> ---
> CAvl> ______________________________________________
> CAvl> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> CAvl> Para saber como gerenciar/excluir seu cadastro na lista, use:
> CAvl> http://www.firebase.com.br/fb/artigo.php?id=1107
> CAvl> Para consultar mensagens antigas:
> http://www.firebase.com.br/pesquisa_lista.html
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas:
> http://www.firebase.com.br/pesquisa_lista.html
>


Mais detalhes sobre a lista de discussão lista