Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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)?
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?
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.
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.
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.
-------------
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.