Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

tesla

Como usar os índices neste caso?

Recommended Posts

Pessoal tenho uma tabela com os seguintes campos:

username

password

protocol

 

As condições de consulta são:

Select pelo username e password

Select pelo username

Select pelo protocol

 

Sendo que todos estes campos serão únicos. Então como eu deveria criar os índices na tabela?

UNIQUE (username, password, protocol)?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se cada campo é único então serão preciso 3 índices, um para cada campo.

 

Pois na combinação poderia ocorrer algo como :

 

username password
-----------------
joao     123
maria    321
jose     321

 

Assim a senha 321 pode ocorrer duas vezes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendo, então teria que colocar um UNIQUE para cada certo?

Mas numa pesquisa onde a cláusula WHERE seria password=x and username=y o índice ainda ajudaria no desempenho da busca?

 

E aproveitando, qual a utilidade de fazer uma Constraint para uma Foreign Key?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendo, então teria que colocar um UNIQUE para cada certo?
Mas numa pesquisa onde a cláusula WHERE seria password=x and username=y o índice ainda ajudaria no desempenho da busca?

E aproveitando, qual a utilidade de fazer uma Constraint para uma Foreign Key? 

 

Querendo que CADA campo seja único, sem uma constraint de unique para cada.

 

A Foreing Key é uma constraint que garente que existe um registro correspondente em uma outra tabela referenciada.

 

Veja o manual para mais detalhes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Traduzindo para SQL:

[...]
UNIQUE (username),
UNIQUE (password),
UNIQUE (protocol),
[...]

 

E não fazer:

 

[...]
UNIQUE (username, password, protocol),
[...]

 

Pois pelo que li no manual, um índice de múltiplas colunas funciona por concatenação das colunas que serão ordenadas concatenadas no array de índices, ou seja.

Será indexado como único a string: username+password+protocol

E não cada uma separada.

 

Então como eu vou ter 1 pesquisas com cláusula "username=x and password=y" e 2 pesquisas com cláusula "username=x" e "protocol=y", tenho que decidir por qual será mais usada. A primeira cláusula será usada para login do usuário, a segunda será usada nas páginas que o usuário visitar quando estiver logado. Creio que a segunda será mais usada, então devo investir em índices separados mesmo. Fora pela questão de cada senha ser única.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A questão é você podrá ter

 

joão/1234/protocol1

maria/1234/protocol2

joão/4321/protocol1

 

Ou seja dois "joôes" e pelo que entendi CADA um dos campos seria único.

 

A chave concatenada resolve, desde que cada campo não precise ser único.

 

-------------

Quanto a pesquisa são outros "500 reais", crie índices com bases nas pesquisas mais usuais, não vale a pena criar índice para uma pesquisa eventual.

-------------

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.