Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Index campo de forma decrescente no mysql


prod

Question

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

Edited by prod
Link to post
Share on other sites

8 answers to this question

Recommended Posts

  • 0

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.31

Não há mais suporte para as versões menores ou iguais a 4.1.

O manual usado para estas vesões é o da 4.1

Nã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. Na

versã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 independente

da 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 to post
Share on other sites
  • 0

'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 to post
Share on other sites
  • 0

Denis desculpa a demora para responder é que estou meio na correria

segue o scripty abaixo

create index ind_ts on wholes (ts desc)

o campo ts é um time stamp

estou indexando porque preciso encontrar o ultimo valor armazenado

entã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

Edited by prod
Link to post
Share on other sites
  • 0
...estou indexando porque preciso encontrar o ultimo valor armazenado

entã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

Oi, '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 to post
Share on other sites
  • 0

Entendi!!!!

só me tire uma ultima duvida

no select abaixo

sql 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 entre

estes 1000 registros certo?

Não importa que o campo ts (que é o timestamp) esta indexado de forma crescente ou descrescente

o tempo de busca sera o mesmo?

Edited by prod
Link to post
Share on other sites
  • 0
Entendi!!!!

só me tire uma ultima duvida

no select abaixo

sql 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 entre

estes 1000 registros certo?

Não importa que o campo ts (que é o timestamp) esta indexado de forma crescente ou descrescente

o 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 to post
Share on other sites
Guest
This topic is now closed to further replies.


  • Forum Statistics

    • Total Topics
      149413
    • Total Posts
      645906
×
×
  • Create New...