Jump to content
Fivewin Brasil

Indice no mysql (resolvido)


Anthony Ormond

Recommended Posts

eu uso uma funcao que é o seguinte primeiro uso o comando

show index from "sua tabela"

o MySQL vai retornar um subset som varias colunas, a 3a é o nome do indice e depois vem as colunas ..etc..entao voce verifica o nome que procura..e se um dia vc mudar a coluna colocando outra junto.. é só comparar

Ari

Link to comment
Share on other sites

citação:

Estou criando um índice no mysql

"CREATE INDEX NOME_INDEX ON NOME_TABELA (COL_TABELA);"

O que devo fazer para saber se o indice já existe?

Desde já, agradeço pelo ajuda.

anthony804tk9.png


id=quote>id=quote>

Anthony,

Vc pode utilizar a seguinte instrução SQL:

id=code>
id=code>

Apesar de que, o MySQL irá criticar caso o nome do índice para a chave já existir!

--

Júlio César M. Ferreira

www.rsconsultores.com.br

Fone: (81) 4009.5444

Fax: (81) 4009.5400

E-mail: julio.mferreira@gmail.com

MSN: julio_mferreira@hotmail.com

Recife - PE

FWh 8.08/ xHarbour 1.1.0/ xDevStudio 0.72/ SQL LIB 1.9/ Pelles 5.00.1

Editado por - jc on 19/11/2008 15:18:42

Link to comment
Share on other sites

Olá Júlio

Muito Obrigado pela ajuda.

O show index verifica a existencia do índice e caso já exista ele cria novamente??

Eu gostaria de apagar o indice caso ele exista.

Gostaria de um exemplo.

citação:

citação:

Estou criando um índice no mysql

"CREATE INDEX NOME_INDEX ON NOME_TABELA (COL_TABELA);"

O que devo fazer para saber se o indice já existe?

Desde já, agradeço pelo ajuda.

anthony804tk9.png


id=quote>id=quote>

Anthony,

Vc pode utilizar a seguinte instrução SQL:

id=code>
id=code>

Apesar de que, o MySQL irá criticar caso o nome do índice para a chave já existir!

--

Júlio César M. Ferreira

www.rsconsultores.com.br

Fone: (81) 4009.5444

Fax: (81) 4009.5400

E-mail: julio.mferreira@gmail.com

MSN: julio_mferreira@hotmail.com

Recife - PE

FWh 8.08/ xHarbour 1.1.0/ xDevStudio 0.72/ SQL LIB 1.9/ Pelles 5.00.1

Editado por - jc on 19/11/2008 15:18:42


id=quote>id=quote>

anthony804tk9.png

Editado por - aormond on 19/11/2008 15:45:55

Link to comment
Share on other sites

Anthony,

Na verdade o SHOW INDEX vai te mostrar todos os índices da tabela em questão, bem como a chave primária e outras informações.

Com isso, através da função SQLArray(), vc fazer uma varredura para achar o índice ou fazer dessa forma abaixo:

id=code>
id=code>

--

Júlio César M. Ferreira

www.rsconsultores.com.br

Fone: (81) 4009.5444

Fax: (81) 4009.5400

E-mail: julio.mferreira@gmail.com

MSN: julio_mferreira@hotmail.com

Recife - PE

FWh 8.08/ xHarbour 1.1.0/ xDevStudio 0.72/ SQL LIB 1.9/ Pelles 5.00.1

Link to comment
Share on other sites

Bom, acredito (e acho que li em algum lugar) que o MySQL gerencie os índices internamente para obter os melhores resultados. Por exemplo, nos sistemas que usam MySQL aqui, ao se fazer ORDER BY ou SELECTs usando a cláusula WHERE, sem estar com os campos indexados, tais querys demoravam séculos...

O que eu fiz então foi, ao invés de criar índices compostos, indexei cada coluna separadamente em um índice. Exemplo:


For j = 1 to Len(aCampos)

cSQL:= "ALTER TABLE "+tabela+" ADD INDEX K"+AllTrim(aCampos[j,2])+" ("+AllTrim(aCampos[j,2])+")"

XSQLExecute(cSQL)

Next

id=code>id=code>

Já que o MySQL "escolhe" o melhor método de se obter os dados a partir de um comando qualquer que retorne dados, desse modo, melhorou em muito a eficiência de minhas pesquisas. Porém, se o volume de dados e nº de colunas forem grandes, a 1ª indexação pode demorar um pouco, mas depois de feita, se você rodar o mesmo comando de novo, o próprio banco trata isso e apenas atualiza os indices.

Link to comment
Share on other sites

Quando efetuo

ALERT(INDEX("SHOW INDEX FROM "+cTable+" WHERE Key_mame = "+aNameInd+"")) o retorno é sempre falso.

citação:

Anthony,

Na verdade o SHOW INDEX vai te mostrar todos os índices da tabela em questão, bem como a chave primária e outras informações.

Com isso, através da função SQLArray(), vc fazer uma varredura para achar o índice ou fazer dessa forma abaixo:

id=code>
id=code>

--

Júlio César M. Ferreira

www.rsconsultores.com.br

Fone: (81) 4009.5444

Fax: (81) 4009.5400

E-mail: julio.mferreira@gmail.com

MSN: julio_mferreira@hotmail.com

Recife - PE

FWh 8.08/ xHarbour 1.1.0/ xDevStudio 0.72/ SQL LIB 1.9/ Pelles 5.00.1


id=quote>id=quote>

anthony804tk9.png

Link to comment
Share on other sites

Anthony,

Essa instrução que te passei precisa ser executada com a função SQLArray()... dessa forma, vc vai recuperar a linha com as informações para o índice definido em "key_name".... caso não exista nada, se vier len() == 0, então é pq o índice não existe para aquela tabela.

Agora talvez a SQLLIB possua funções próprias para verificar se um determinado índice já existe!

Esse método que te passei, seria na forma crua... com SQL puro.

citação:

Quando efetuo

ALERT(INDEX("SHOW INDEX FROM "+cTable+" WHERE Key_mame = "+aNameInd+"")) o retorno é sempre falso.

citação:

Anthony,

Na verdade o SHOW INDEX vai te mostrar todos os índices da tabela em questão, bem como a chave primária e outras informações.

Com isso, através da função SQLArray(), vc fazer uma varredura para achar o índice ou fazer dessa forma abaixo:

id=code>
id=code>

--

Júlio César M. Ferreira

www.rsconsultores.com.br

Fone: (81) 4009.5444

Fax: (81) 4009.5400

E-mail: julio.mferreira@gmail.com

MSN: julio_mferreira@hotmail.com

Recife - PE

FWh 8.08/ xHarbour 1.1.0/ xDevStudio 0.72/ SQL LIB 1.9/ Pelles 5.00.1


id=quote>id=quote>

anthony804tk9.png


id=quote>id=quote>

--

Júlio César M. Ferreira

www.rsconsultores.com.br

Fone: (81) 4009.5444

Fax: (81) 4009.5400

E-mail: julio.mferreira@gmail.com

MSN: julio_mferreira@hotmail.com

Recife - PE

FWh 8.08/ xHarbour 1.1.0/ xDevStudio 0.72/ SQL LIB 1.9/ Pelles 5.00.1

Link to comment
Share on other sites

aormond,

uma pergunta básica, qual RDD voce está usando para trabalhar com SQL??

Luisão, não é bem assim não!!

citação:

om, acredito (e acho que li em algum lugar) que o MySQL gerencie os índices internamente para obter os melhores resultados. Por exemplo, nos sistemas que usam MySQL aqui, ao se fazer ORDER BY ou SELECTs usando a cláusula WHERE, sem estar com os campos indexados, tais querys demoravam séculos...


id=quote>id=quote>

o melhor método é uma analise dos dados da sua tabela identificando as consultas mais utilizadas e criar índices com as colunas (simples ou compostas - dependendo do caso) isto otimiza o tamanho do banco de dados e não perde a performace!..

da forma que vc está fazendo o banco requer muito recurso de máquina para fazer a atualização de um registro numa situação de inclusão ou alteração de dados. Voce pode estar tendo resultado enquanto sua table é pequena ou com poucas colunas... más no momento que estiver com muitos registros seu sistema vai ficar muito lento e pesado e exigindo cada vez mais hardware para o servidor!..

[]s..

Marllon Figueiredo

Tecnologia de Sistemas

siscat@siscat.com.br

FWH+xHb+SQL+SQLRDD+xDevStudio

aplicacoes.gif

Os desenvolvedores não podem viver sem estas ferramentas!

Link to comment
Share on other sites

Marllon, obrigado pela dica...

Quando eu disse que o MySQL "gerencia" os índices internamente, quis dizer que não precisamos por exemplo para procurar um certo registro usar um SET ORDER TO e DBSEEK como nos comandos nativos do Clipper... Passamos apenas a cláusula WHERE no comando sem especificar indices nem nada e ele se encarrega de utilizar os melhores índices para a pesquisa...

Quanto ao desempenho de se criar um índice para cada coluna, na época que estava analisando como ficaria a criação dos índices, achei que fosse a melhor solução para o momento e resolveu muito bem minha necessidade. Mas como você mesmo disse, com o tempo e com o aumento no volume de dados isso pode se tornar menos eficiente, mas por enquanto, a performance está muito boa até mesmo para tabelas muito grandes (+700.000 registros)

Mas é assim que funciona, trocando informações, todos melhoramos!

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...