tesla 0 Denunciar post Postado Julho 17, 2011 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
Motta 645 Denunciar post Postado Julho 17, 2011 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
tesla 0 Denunciar post Postado Julho 17, 2011 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
Motta 645 Denunciar post Postado Julho 17, 2011 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
tesla 0 Denunciar post Postado Julho 17, 2011 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
Motta 645 Denunciar post Postado Julho 18, 2011 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