Ir para conteúdo

POWERED BY:

Arquivado

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

ThAuA

Método de consulta no php (SQL)

Recommended Posts

Tipo, não sei se tem artigo sobre isso, se já falaram, se usam ou sei lá o que, mas esses dias eu estava pensando aqui, e tive a seguinte dúvida:

 

Existem querys que você faz em um site, que você só precisa de uma linha(um resultado, uma row, como preferir), exemplo, verificar idade de um login:

$data = mssql_query("select idade from cadastros where login='thaua'");
$data = mssql_fetch_row($data);
//$data vai ter a idade de thaua.

Só que no SQL, se você executar essa query, ela vai percorrer todas linhas e retornar as que tiverem login='thaua'.

 

Mas, e se por um "select top 1", ela não para tudo após achar o primeiro resultado?

Se parar, a consulta demorará menos, deixando a página mais rápida, certo?

 

Bom, o padrão de uma consulta como essa acredito que seria verificar pelo índice da linha e não o login (pois se for pelo índice com auto_increment, é meio lógico que ela pare após achar um resultado, pois não há repitidos), mas vamos supor que minha coluna login esteja setada como 'única', a consulta vai pesquisar só o primeiro resultado também? (porque se é 'única', não existem outros com o mesmo valor =])

E se não tiver setada como 'única' ?

 

Claro que a diferença de tempo que digo ai em cima pode nem ser notável, mas é que gosto muito de manter meu site limpo, usando só o que precisa, e fazendo só o que precisa.

 

Mas enfim, o que gostaria de saber:

Se o "select top 1" que falei faz sentido [se a coluna de condição não for única].

Se a coluna for índice com auto-incremento, a consulta dá um "stop" após achar um resultado.

Se acontece o mesmo com uma coluna 'única'.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

A maneira mais rápida é fazer um índice para o campo "login".

Crie um indice para ele que vai agilizar bem a consulta.

 

Se não me falha a memória, um indice não funciona em campos TEXT, mas em VARCHAR vai normal.

 

@braços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado, andei lendo aqui na net também sobre os tipos de chaves, vou começar a dar mais atenção a eles ^^

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde Thaua e hufersil.

 

Estou com um link interessante sobre otimização de consultas a bancos de dados. É da MySQL Lab porém, creio eu, serve para quase todas as SQLs que você poderá criar.

 

http://dev.mysql.com/doc/refman/4.1/pt/query-speed.html

 

Creio que a busca seja mais rápida num campo tipo chave(índice), porém não acho que ele "pare" a busca quando achar determinado login. Eu acho!!! Não tenho certeza. Tentei verificar aqui, mas não achei nada, para te dar um certeza. Porém, se você ver pela lógica creio que ele não pare, pq você pode usar o mysql_num_rows, ou seja, quantas são as linhas que tem o longin... sacou?! Ou seja, o SGDB verifica todas as linhas... Bom, pano para manga!rs

 

Espero ter ajudado,

Abraços,

Léo

Compartilhar este post


Link para o post
Compartilhar em outros sites

mysql_num_rows retorna quantos resultados/linhas a consulta obteve, e isso não tem a ver com a dúvida minha ^^

 

Logicamente ela para a consulta sim, porque você imagina, se um campo é único, não existe campos com o mesmo valor, qual seria a lógica de ela continuar percorrendo?

 

Vou ver esse link ai que você mandou, vlw...

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando se cria um indice, e o que se está procurando é pelo indice, o sistema fica mais rápido por que ele monta tipo "uma tabela a parte" no sistema somente com os dados. É como se voce tivesse que procurar em um livro de 580 páginas pela palavra ESTERNOCLEIDOMASTOIDEO. Ficaria meio complicado, mas se você olhar no indice de palavras, sua busca fica bem mais fácil. Funciona de forma semelhante no banco: montando o índice, ele já sabe onde procurar.

 

Quando se pesquisa por uma chave primária, ele pára assim que o resultado é encontrado, uma vez que uma chave primária não pode ser duplicada, o SGBD sabe que não irá encontrar outra chave com o mesmo valor. No indice, ele continua percorrendo, porém a busca é otimizada. Com o limit, ele pára a consulta assim que o número de resultados for igual ao desejado (LIMIT).

 

Para que um campo não contenha valores repetidos, você deve criá-lo como uma chave primária OU um indice único (unique index). No caso do unique index, é bem provável que o SGBD pare a analise da tabela assim que o valor for encontrado.

 

@braços e fique com Deus!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando se cria um indice, e o que se está procurando é pelo indice, o sistema fica mais rápido por que ele monta tipo "uma tabela a parte" no sistema somente com os dados. É como se voce tivesse que procurar em um livro de 580 páginas pela palavra ESTERNOCLEIDOMASTOIDEO. Ficaria meio complicado, mas se você olhar no indice de palavras, sua busca fica bem mais fácil. Funciona de forma semelhante no banco: montando o índice, ele já sabe onde procurar.

 

Quando se pesquisa por uma chave primária, ele pára assim que o resultado é encontrado, uma vez que uma chave primária não pode ser duplicada, o SGBD sabe que não irá encontrar outra chave com o mesmo valor. No indice, ele continua percorrendo, porém a busca é otimizada. Com o limit, ele pára a consulta assim que o número de resultados for igual ao desejado (LIMIT).

 

Para que um campo não contenha valores repetidos, você deve criá-lo como uma chave primária OU um indice único (unique index). No caso do unique index, é bem provável que o SGBD pare a analise da tabela assim que o valor for encontrado.

 

@braços e fique com Deus!

 

Opa, valeu mesmo, falou tudo que eu queria saber!!!

 

Abraços....

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.