Olá pessoal
Agradeço Cleiton e Euler pelas explicações, tanto do tipos de dados
que devem ser iguais nas chaves pk e fk, tanto de que o postgresql
permite criar vários indices sobre a mesma coluna.
Concordo que não criar índice para cada fk ajuda muito, pois com
certeza diminuirá o overhead nas atualizações.

[]`s
Neto
 <div id="DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2"><br /> <table
style="border-top: 1px solid #D3D4DE;">
        <tr>
      <td style="width: 55px; padding-top: 18px;"><a
href="https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail";
target="_blank"><img
src="https://ipmcdn.avast.com/images/icons/icon-envelope-tick-round-orange-animated-no-repeat-v1.gif";
alt="" width="46" height="29" style="width: 46px; height: 29px;"
/></a></td>
                <td style="width: 470px; padding-top: 17px; color: #41424e;
font-size: 13px; font-family: Arial, Helvetica, sans-serif;
line-height: 18px;">Livre de vírus. <a
href="https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail";
target="_blank" style="color: #4453ea;">www.avast.com</a>.              </td>
        </tr>
</table>
<a href="#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2" width="1" height="1"></a></div>

Em 20 de agosto de 2017 11:09, Euler Taveira <eu...@timbira.com.br> escreveu:
> Em 19 de agosto de 2017 18:24, Neto pr <neto...@gmail.com> escreveu:
>> Segundo alguns autores, ao se criar uma chave primaria, na verdade o
>> SGBD cria um índice primário/único no caso de chave primaria. Mas e no
>> caso da chave estrangeira, o SGBD indexa a coluna Fk também?
>>
> Alguns SGBDs criam/criavam índices para cada chave estrangeira criada;
> o PostgreSQL, não. Na minha opinião foi uma decisão sábia do
> PostgreSQL porque (i) nem todo índice de chave estrangeira é utilizado
> (é útil para remover registro que é referenciado por chave estrangeira
> e as tabelas referenciadas são grandes) e (ii) não incha o modelo com
> índices desnecessários.
>
>> Pergunto isso pois criei a seguinte chave estrangeira em um banco de
>> testes (do benchmark TPCH):
>>
>> ALTER TABLE ORDERS ADD FOREIGN KEY (O_CUSTKEY) REFERENCES 
>> CUSTOMER(C_CUSTKEY);
>>
>> Apos tentei criar um índice secundário btree na tabela ORDERS desta forma:
>> CREATE INDEX indice_custkey_customer on ORDERS (O_CUSTKEY);
>>
>> Achei que o PostgreSQL  Não iria permitir isso, pois pensei que a
>> coluna O_CUSTKEY já estava indexada (pela chave estrangeira), mas o
>> PostgreSQL aceitou o índice secundário.
>>
> Como eu disse, o PostgreSQL não cria índice ao criar chave
> estrangeira. Fica a critério do AD/DBA criar tais índices. Além disso,
> você pode criar quantos índices quiser em uma mesma coluna.
>
> euler=# create table foo (a int primary key, b int not null);
> CREATE TABLE
> euler=# create index foo1 on foo(b);
> CREATE INDEX
> euler=# create index foo2 on foo(b);
> CREATE INDEX
> euler=# \d foo
>        Tabela "public.foo"
>  Coluna |  Tipo   | Modificadores
> --------+---------+---------------
>  a      | integer | não nulo
>  b      | integer | não nulo
> Índices:
>     "foo_pkey" PRIMARY KEY, btree (a)
>     "foo1" btree (b)
>     "foo2" btree (b)
>
> Isso é últil para descartar um índice inchado (é claro que essa
> técnica envolve parada. Use CONCURRENTLY para diminuir o tempo de
> bloqueio.).
>
>> Alguém saberia explicar SE ao criar uma chave estrangeira, é criado ou
>> não um índice.
>> Outro dia estava vendo um plano de execução, e no plano tinha o uso de
>> uma chave estrangeira para recuperar registros, por isso também a
>> dúvida.
>>
> O plano pode considerar o uso de índice em uma chave estrangeira (em
> junções o planejador é esperto em utilizar o índice da chave
> primária). Algo como:
>
> SELECT x, y, z FROM orders WHERE o_custkey = 1234;
>
>
> --
>    Euler Taveira                                   Timbira -
> http://www.timbira.com.br/
>    PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento
> _______________________________________________
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a