prod Postado Fevereiro 19, 2009 Denunciar Share Postado Fevereiro 19, 2009 (editado) Pessoal tenho uma dvida com relação ao index no mysql.preciso indexar um campo no mysql de forma descrescente, mas encontrei que o mySql, nãoindex em ordem decrescente ela até aceita o comando,mas não o faz. Isso na versão 3, gostaria de saber se isso é verdadee se for se sabem se tem alguma versão em que esse problema foi resolvido ou alguma dica de como fazer isto.Grato pela Atenção Editado Fevereiro 19, 2009 por prod Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Fevereiro 19, 2009 Denunciar Share Postado Fevereiro 19, 2009 Oi, 'prod'!Assim que você puder atualize a versão de seu banco para uma mais atual. A atual mais estável é a 5.1.31Não há mais suporte para as versões menores ou iguais a 4.1.O manual usado para estas vesões é o da 4.1Não há referência neste manual sobre o que você disse. Mas achei estas referências:ORDER BY coluna DESC ordena valores NULL por último, como no MySQL 4.0.11. Naversão 3.23 e anteriores da versão 4.0, isto nem sempre era consistente.O MySQL 4.0.2 a 4.0.10 sempre ordenam, incorretamente, valores NULL em primeiro independenteda ordem escolhida.A ordenação padrão é crescente, com os valores menores em primeiro. Para ordenação na ordem reversa,adicione a palavra chave DESC (descendente) ao nome da coluna que deve ser ordenada:mysql> SELECT name, birth FROM pet ORDER BY birth DESC; Link para o comentário Compartilhar em outros sites More sharing options...
0 prod Postado Fevereiro 19, 2009 Autor Denunciar Share Postado Fevereiro 19, 2009 (editado) Denis, mas na versão 5.1.31 aceita a indexação em ordem decrescente porque estou com versão 5.0 e aparentemente não deu certo Editado Fevereiro 19, 2009 por prod Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Fevereiro 20, 2009 Denunciar Share Postado Fevereiro 20, 2009 'prod'.Passa um exemplo dos dados e o SQL que você gerou para a consulta, para que eu possa analisar melhor o que está acontecendo. Link para o comentário Compartilhar em outros sites More sharing options...
0 prod Postado Fevereiro 20, 2009 Autor Denunciar Share Postado Fevereiro 20, 2009 (editado) Denis desculpa a demora para responder é que estou meio na correria segue o scripty abaixocreate index ind_ts on wholes (ts desc)o campo ts é um time stamp estou indexando porque preciso encontrar o ultimo valor armazenadoentão indexo em ordem decreceste depois utilizo a função max (sql select Max(ts) from wholes where id = "valor inserido")para trazer o maior valor, como esta em ordem descrecente acredito que a busca seria muito mais rápida. Utilizido desta maneiro porque o banco possui aprximadamente 33.000 registros e continua crescendo Editado Fevereiro 20, 2009 por prod Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Fevereiro 20, 2009 Denunciar Share Postado Fevereiro 20, 2009 ...estou indexando porque preciso encontrar o ultimo valor armazenadoentão indexo em ordem decreceste depois utilizo a função max (sql select Max(ts) from wholes where id = "valor inserido")para trazer o maior valor, como esta em ordem descrecente acredito que a busca seria muito mais rápida. Utilizido desta maneiro porque o banco possui aprximadamente 33.000 registros e continua crescendoOi, 'prod'!Pelo que você comentou acima, não há a necessidade de indexar de forma inversa. Por padrão o MySQL ordena usando o algorítimo de árvore B, também conhecido por b-tree. neste caso, a chave superior é a do meio da árvore. por exemplo, uma tabela com os registros a, a, z, y, r, m, nesta ordem. No topo da árvore estará o "m". Por isso, no seu caso, não faz diferença indexar ASC ou DESC.Fiz testes com uma base que tnho e a ordenação ficou correta. Uso a versão 5.0.37 em ambiente windows.Mais uma coisa: No seu caso deverá haver um índice pelo atributo id pois ele está na cláusula where que influenciará diretamente na pesquisa, pois a função MAX() só será usada após o MySQl sepearar o resultado do que ele encontrar de [~b]d = "valor inserido" Link para o comentário Compartilhar em outros sites More sharing options...
0 prod Postado Fevereiro 25, 2009 Autor Denunciar Share Postado Fevereiro 25, 2009 (editado) Entendi!!!! só me tire uma ultima duvida no select abaixosql select Max(ts) from wholes where id = "valor inserido"voce disse que: Mais uma coisa: No seu caso deverá haver um índice pelo atributo id pois ele está na cláusula where que influenciará diretamente na pesquisa, pois a função MAX() só será usada após o MySQl sepearar o resultado do que ele encontrar de [~b]d = "valor inserido"o select retorna um id só que preciso encontrar o ultimo dado inserido sobre este id,mas este id possui 1000 dados inseridos referente a ele e a função max() precisa percorrer entreestes 1000 registros certo?Não importa que o campo ts (que é o timestamp) esta indexado de forma crescente ou descrescenteo tempo de busca sera o mesmo? Editado Fevereiro 25, 2009 por prod Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Fevereiro 26, 2009 Denunciar Share Postado Fevereiro 26, 2009 Entendi!!!! só me tire uma ultima duvida no select abaixosql select Max(ts) from wholes where id = "valor inserido"voce disse que: Mais uma coisa: No seu caso deverá haver um índice pelo atributo id pois ele está na cláusula where que influenciará diretamente na pesquisa, pois a função MAX() só será usada após o MySQl sepearar o resultado do que ele encontrar de [~b]d = "valor inserido"o select retorna um id só que preciso encontrar o ultimo dado inserido sobre este id,mas este id possui 1000 dados inseridos referente a ele e a função max() precisa percorrer entreestes 1000 registros certo?Não importa que o campo ts (que é o timestamp) esta indexado de forma crescente ou descrescenteo tempo de busca sera o mesmo?Exatamente.Primeiro, usando o índice, ele vai separar as ocorrências com o ID igual ao "valor inserido"Depois, vai buscar o maior valor de ts para este id. Link para o comentário Compartilhar em outros sites More sharing options...
0 prod Postado Fevereiro 26, 2009 Autor Denunciar Share Postado Fevereiro 26, 2009 (editado) OKObrigado pela ajuda Denis Editado Fevereiro 26, 2009 por prod Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
prod
Pessoal tenho uma dvida com relação ao index no mysql.
preciso indexar um campo no mysql de forma descrescente, mas encontrei que o mySql, não
index em ordem decrescente ela até aceita o comando,mas não o faz. Isso na versão 3, gostaria de saber se isso é verdade
e se for se sabem se tem alguma versão em que esse problema foi resolvido ou alguma dica de como fazer isto.
Grato pela Atenção
Editado por prodLink para o comentário
Compartilhar em outros sites
8 respostass a esta questão
Posts Recomendados