[firebase-br] Dúvida sobre indices

Mário Reis mariodosreyx em gmail.com
Ter Maio 5 16:28:05 -03 2020


Desde logo como disse o Cantu V. não tem duas chaves primárias que isso não
existe para a mesma tabela. O que  V. tem uma única chave primaria composta
por dois campos, meu caro
Assente que  duas chaves primária no mesmo ficheiro não existe V. tem duas
alternativas
1.º  tem que analisar se precisa mesmo de uma chave primaria composta por
esses 2 campos
Porque o mais certo é não necessitar.
Então V. usa no PK a Chave1 e a Chave2 num indice Único.
No entanto, se necessita mesmo de chaves compostas é a mesma coisa.
Na PK=Chave1+Chave2 Unique Key=Chave2+Chave1, e ambos com actualização
dinâmica. Assim qaundo fizer o Query o Sql por si mesmo sabe o índice que
deve usar e usa o que tiver a ordenação pela parte da chave mais à esquerda
(LeftMost key part creio que era assim que a designa o Prof E.F Codd da IBM
lá atrás no anos 70) .
Assim:
ALTER TABLE <TABELA> ADD CONSTRAINT PK_CHAVE1 PRIMARY KEY (CHAVE1);
ADD CONSTRAINT UQ_TABELA UNIQUE (CHAVE2);
OU, em alternativa:
ALTER TABLE <TABELA> ADD CONSTRAINT PK_CHAVE1 PRIMARY KEY (CHAVE1,CHAVE2);
ALTER TABLE <TABELA> ADD CONSTRAINT UQ_TABELA UNIQUE ( CHAVE2,CHAVE1 );
Não sei se consegui ajudar, seria mais fácil se soubesse qual q sua ideia,
exacatmente. De qualquer forma estude as diferenças entre PK e UQ.
Basicamente a PK não permite campos nulos enquanto a UQ permite o que
poderá ter desvantagens e vantagens.se estou bem lembrado e, Foreing keys
não se deve(ou não se pode) usar UQ etc..
Assim não tem porque não conseguir a mesma performance

Com os meus melhores cumprimentos
Mário Agostinho Reis
919262146

Esta mensagem contém informação de natureza confidencial e é
exclusivamente dirigida ao(s) destinatário(s) indicado(s). Se, por engano,
receber este email agradecemos que não o copie nem o reenvie e que nos
notifique do ocorrido através do email de resposta.
[image: cloudHQ]
<https://chrome.google.com/webstore/detail/free-email-tracker/nknojfclnachdkpdkjbbhbkgpnladhnj>
Powered
by
cloudHQ
<https://chrome.google.com/webstore/detail/free-email-tracker/nknojfclnachdkpdkjbbhbkgpnladhnj>


Urias Gadelha <uriasgadelha em redesoft.com.br> escreveu no dia segunda,
4/05/2020 à(s) 19:40:

> Pessoal, me tira uma dúvida por favor
>
> Tenho a seguinite tabela.
>
> CREATE TABLE TABELA (
>        CHAVE1 Numeric(10,0) NOT NULL,
>        CHAVE2 Numeric(10,0) NOT NULL,
>        CAMPO1 TIMESTAMP,
>        CAMPO2 Varchar(1),
>        CAMPO3 Numeric(10,0),
>        CAMPO4 Numeric(10,0),
>        CAMPO5 Numeric(10,0),
>        CONSTRAINT TABELA PRIMARY KEY (CHAVE1,CHAVE2)
> );
>
> Nela, criei a PK usando os campos CHAVE1 e CHAVE2.
>
> Se eu executo:
>
> select * from TABELA
> where TABELA.CHAVE1 = 30405
>
> Tenho o plano:
>
> PLAN (TABELA INDEX (PK_TABELA))
>
> Porém, se e eu executar o select pela outra chave primária:
>
> select * from TABELA
> where TABELA.CHAVE2 = 30405
>
> Tenho o plano:
>
> PLAN (TABELA NATURAL)
>
> Alguém sabe me dizer o porque? se estou usando as duas chaves primárias,
> uma em cada select...
>
> Desde já, agradeço a ajuda!
>
> --
> ______________________________________________
> 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