Ir para conteúdo

POWERED BY:

Arquivado

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

nknk

Eficiência na busca

Recommended Posts

O que seria melhor para uma busca, eu criar tabelas especificas para cada letra do alfabeto ou manter em uma tabela só?

 

Por exemplo: 100.000 funcionários cadastrados.

É mais eficiente ter uma tabela para registrar os funcionários com a letra A, B e assim sucessivamente?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

 

Caro nknk,

 

Isso depende do banco de dados, imagino até que o pessoal do fórum SQL, Oracle etc., consiga responder com maior eficiência.

 

Lembrando também que a estrutura das suas tabelas terão muitas responsabilidades, se você usa MyISAM ou InnoDB.

 

Sucesso.

 

Editando:

Minha opinião: acho que não é preciso criar uma tabela pra cada um, você poderá fazer na mesma, deste que a faça bem elaborada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não. Basta você somente criar uma tabela para funcionario.

Quanto sua busca basta você somente detalhar a mesma.

Ex: Select * from funcionario where=""; e ai vai LIKE.............

ABRAÇOS

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual gerenciador você usa ? MySQL ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, seria com Mysql. Pq não conheço os outros banco de dados. E geralmente faço tabelas com Myisam não sei para que serve InnoBD

 

Mas o que seria uma tabela bem estruturada e uma mal estruturada ?

 

Vou dar um exemplo mais ou menos: Vamos supor que eu tenha que cadastrar entre 100.000 a 1.000.000, como uma comunidade do orkut, uolk. Com os seguintes dados

 

Id (auto increment), Nome, Sobrenome, data de nascimento, obs, ip, data, hora, cidade, estado.

 

Para uma tabela deste tamanho eu deveria criar uma tabela para cada letra? Imagino que seria mais eficiente, por exemplo na hora de fazer a consulta primeiro eu quebraria o nome da pessoa, pegaria a primeira letra e faria a consulta assim

 

quebra[0] seria A ou B ... ou Y

 

$tabela = "profiles_".$quebra[0];

 

$primeira_letra = $quebra[0];

 

SELECT nome,id,obs FROM $tabela WHERE nome LIKE $primeira_letra% ORDER BY id DESC

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em se tratando de performance, acho que você teria um grande ganho, mas veja o outro lado da moeda.

 

Imagina que agora você tem a tabela ComunidadesProfiles onde você tem:

 

ID (auto_increment)

id_comunidade (referenciando a tabela de comunidades)

id_profice (id de um usuário, que tabela você iria referencia aqui? todas as profile_A, profile_B, profile_C??)

 

Usando o mesmo exemplo acima, se você quiser pegar o nome de todos os profiles que estão na comunidade de código 2, como você faria? INNER JOIN com todas as tabelas?

 

Bom, na minha opinião temos mais contras do que prós, eu ficaria com apenas uma tabela.

 

Trabalho com MSSQL e temos tabelas com bilhões de registros, uma consula simples, sem joins e utilizando um criterio WHERE leva poucos segundos. Mas isso acontece porque temos índices eficazes e um bom hardware no servidor do bd.

 

Att,

Guilherme Oenning.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Neste caso da comunidade ficaria cheia a consulta. Acho que esta separação em tabelas seria bom para uma consultas que não requeressem interligação entre estas belas. Vou optar por não separar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

As informações acima não são exatas!

 

Primeiro evite ao máximo utilizar LIKE%...%. Elas São muito lentas.

Use um match against, são 600 vezes mais rápidas.

 

Em sites de grande movimentação e grande base de dados como no qual eu trabalho onde a base de dados pesa 4Gigas, a replicação éuma alternativa interessante seguida de um split por ordem alfabética. Outro conselho você pode utilizar um método como Sphinx ou Lucene(para este você pode usar a biblioteca do zend framework), para a agilizar a busca.

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.