Jump to content


Photo

Melhorar Query


  • Faça o login para participar
4 replies to this topic

#1 Danilo Dantas

Danilo Dantas

    Portal do Humor.com.br

  • Usuários
  • 89 posts
  • Sexo:Não informado

Posted 14/12/2007, 13:24

Olá!

Estava fazendo uns testes com o MySQL aqui em localhost. Criei uma tabela idiota e adicionei 10 268 082 registros nela.

Mostrando registros 10267980 - 10268009 (10,268,082 total, Consulta levou 7.3155 segundos)
consulta SQL:
SELECT *
FROM `teste`
LIMIT 10267980 , 30

Executando essa query, ele pega os resultados entre os IDs 10267981 e 10268010, mas como se pode ver, demora muito.

Mostrando registros 0 - 29 (30 total, Consulta levou 0.0007 segundos)
consulta SQL:
SELECT *
FROM `teste`
WHERE id >=10267981
AND id <=10268010

Com essa, ele pega os mesmos resultados, porém, muito mais rapidamente.

Minha duvida é seguinte: Vou fazer paginação no meu site, como faço pra pegar, por exemplo, o que eu pegaria usando LIMIT 1000,30 usando algum outro comando SQL? Não da pra fazer usando id > e id < pq minhas ids não são totalmente periódicas, quando deleto algo, a id é perdida, o que atrapalharia a listagem caso eu usasse id > e id <.

[]´s!

#2 Felipe Pena

Felipe Pena

    O temor do Senhor é o princípio da sabedoria

  • Ex-Admins
  • 6441 posts
  • Sexo:Masculino

Posted 15/12/2007, 11:57

Use:
WHERE id >= 10267981 LIMIT 30

Felipe Pena
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29

#3 Danilo Dantas

Danilo Dantas

    Portal do Humor.com.br

  • Usuários
  • 89 posts
  • Sexo:Não informado

Posted 15/12/2007, 23:14

Use:

WHERE id >= 10267981 LIMIT 30


Mas não dá, como eu disse, não tem como eu saber o ID, pq ele não é periódico, tem casos de conteúdo deletado, onde o ID é perdido.

#4 § Kenshin §

§ Kenshin §

    I'm coming back...!

  • Usuários
  • 574 posts
  • Sexo:Masculino
  • Localidade:BA
  • Interesses:Sou fã de linguagens direcionadas para a web, como php, (x)html, xml, wml.
    Também gosto de webdesign e ultimamente tenho me dedicado mais a aprender css, mysql, javascript, ajax e actionscript.
    Trabalho com os programas Dreamweaver, Illustrator e Flash.

Posted 16/12/2007, 16:00

pelo que intendi no codigo do eclesiastes, mesmo que a id nao seja periodica, serao retornados 30 resultados na consulta.
entao se faltar as ids 10267982, 10267985, 10268001 e 10268005, ele vai listar as ids de 10267981 a 10268014.

pra garantir que as ids estarao em sequencia, mesmo que nao seja uma sequencia completa, eh bom colocar um sort by id asc la no final da query.

select * from `teste` where id >= 10267981 sort by 'id' asc limit 30

vlw ^_^

Edição feita por: § Kenshin §, 16/12/2007, 16:14.

Web Developer / Web Designer / Information Architect
"Living to learn... learning to live!"
Useful links: Rules | Search

#5 Danilo Dantas

Danilo Dantas

    Portal do Humor.com.br

  • Usuários
  • 89 posts
  • Sexo:Não informado

Posted 18/12/2007, 14:31

pelo que intendi no codigo do eclesiastes, mesmo que a id nao seja periodica, serao retornados 30 resultados na consulta.
entao se faltar as ids 10267982, 10267985, 10268001 e 10268005, ele vai listar as ids de 10267981 a 10268014.

pra garantir que as ids estarao em sequencia, mesmo que nao seja uma sequencia completa, eh bom colocar um sort by id asc la no final da query.

select * from `teste` where id >= 10267981 sort by 'id' asc limit 30

vlw ^_^


Mas esse código será utilizado numa paginação, ou seja, não tem como eu saber qual a primeira ID da página X.




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq