Indice no MYSQL

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

adauri_junior
Usuário Nível 1
Usuário Nível 1
Mensagens: 1
Registrado em: 25 Ago 2008 13:53
Localização: ribeirao preto

Indice no MYSQL

Mensagem por adauri_junior »

Boa tarde a todos.

Estou utilizando o xHarbour com o MySql atraves do RDD Mediator, eu consegui criar as tabelas, criar os indice, so nao consigo criar os indices usando DTOS . Alguem pode me ajudar ?

Obrigado
rodrmigu
Usuário Nível 3
Usuário Nível 3
Mensagens: 150
Registrado em: 27 Nov 2007 15:13
Localização: Indaiatuba SP

Re: Indice no MYSQL

Mensagem por rodrmigu »

Adauto,

Acredito que o DTOS nao exista no MySql, assim como em outros bancos. Alías, alguns bancos nao usam Funcao para indices, pois os mesmos trabalham de uma forma diferente do xbase. Em bancos de dados, usamos índices compostos, coisa que normalmente nao tem em índices xbase. Conheço apenas um rdbms que usa funcao em chave de um índice, Oracle, mas só usamos pra melhorar performance ou quando uma query obrigatorio tem a mesma função, ex:

Query:

SELECT * FROM empregados WHERE upper(nome) = 'FULANO'

ïndice:

CREATE INDEX ix_empregados_nome ON empregados(upper(nome))

Daí sim, ao invés de fazer um full table scan na tabela, a query passa a usar o índice para busca. No mais, funções em índices em bancos de dados, não tem muita utilidade, se não forem utilizadas em querys, ou seja, para result set, nao serve.

[]'s
Rodrigo
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Re: Indice no MYSQL

Mensagem por janio »

Aproveitando o tópico...

Utilizo MySql + Mediator e tenho estranhado o fato de que a criação do índices no Mysql é muito, mas muito lento, chegando a quase travar o computador e ficando o processador a 100%.

A criação de índices com DBFCDX é uma bala.

Primeiro gostaria de saber se a criação de índices no Mysql é lento dessa forma mesmo.

Segundo, o que se deve fazer para que isso não ocorra.

Jânio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Re: Indice no MYSQL

Mensagem por alaminojunior »

Taí uma coisa que preciso aprender, e que compartilho com os colegas:

1º Em se tratando de tabelas MySql, não haveria a necessidade de se criar índices. Uma vez que o próprio MySql faz isso internamente, não sei de que jeito ! E nem precisa saber mesmo.

2º O Mediator ao "criar" índices, acrescenta outros campos na tabela, referentes ao índice que se quer usar, causando com isso, um possível inchaço nas tabelas.

Como ia dizendo no início, o que precisamos é mudar nosso modo de entender e tratar os dados das tabelas MySql, fazendo uso de query´s, e quem sabe, buscar conhecimento e até aprender com os mais experientes, maneiras de explorar melhor as potencialidades das tabelas MySql com xBase.
E tenho dito.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
MARCELOG
Usuário Nível 4
Usuário Nível 4
Mensagens: 546
Registrado em: 15 Mar 2005 16:54
Localização: Divinópolis/MG

Re: Indice no MYSQL

Mensagem por MARCELOG »

Olá pessoal,
ainda não terminei meu sistema com Mysql para compatilhar o conhecimento adquirido.
Mas não existe nada complicado no uso desse gerenciador de banco de dados.
Se você instalou o Mysql e compilou a lib de contribuição vai dar "quase tudo" certo.
Digo "quase tudo" porque não testei algumas funções, mas até agora está tudo 100%.
Os erros verificados se deram por causa daquele cara que fica digitando o código fonte (eu).
O problema é que o Mysql foi projetado para retornar conjuntos de dados em face instruções sql (query´s).
Essas instruções sql, que são textos interpretados pelo gerenciador Mysql, não tem jeito, vão ter que ser aprendidas no "muque".
Mas não se preocupe, é fácil demais, a síntese usa o inglês básico como os comandos clipper/ xharbour.
Algo do tipo 'select * from cliente' vai retornar todos os registros (linhas e campos) da tabela cliente.
Você pediu, literalmente: 'seleciona tudo de cliente'.
Se a tabela tiver uns 2.000.000 vai ser rapidinho, mas se tiver mais, pode demorar.
Então é necessário criar algo do tipo 'select * from cliente where nome like a%'.
O que isso faz?
Como a instrução sql diz: 'seleciona tudo de cliente onde nome como/contém "a"+qualquer coisa'.
Isso retorna somente os clientes que tem o nome iniciado com a letra 'a'.
Dessa forma, o nosso conjunto de dados pode ter apenas 200.000 registros e vai voar baixo né.
O que a lib faz é colocar esses conjuntos de dados retornados numa "espécie" de matriz para que você dê o tratamento que achar conveniente a eles.
É possível criar um tbrowse com os dados dbf, mas também com os dados de uma matriz, certo!?
Então, faça a consulta mysql, coloque os dados na matriz e trate tudo como uma matriz e pronto.
É mais ou menos assim.

MarceloG

Ps: instale e aprenda a criar um banco de dados e tabelas, bem como alterar e excluir registros no mysql puro, com uso das instruções sql em linha (igual msdos).
Somente depois disso aventure-se na dobradinha mysql/habour-xharbour.
Você vai ver que é moleza.
Água mole em pedra dura tanto bate que até espirra!
Dudu_XBase
Membro Master
Membro Master
Mensagens: 1071
Registrado em: 25 Ago 2003 16:55

Re: Indice no MYSQL

Mensagem por Dudu_XBase »

Boa tarde.
Eu utilizo indices com a função dtos no Mediator.
No mediator Client tem os programas ntx2med ou cdx2med.
Utilize eles para exportar a estrutura de indices das suas tabelas dbf para o Mysql.
Exemplo
ntx2med <banco> <indices>..,
ou
cdx2med <banco> <indices>

Quando sou obrigado a criar um indice novo como uso medcdx eu crio a tag depois rodo o cdx2med lembrando que para isso o acesso ao banco é exclusivo, eu tenho um diretório com os banco dbf e indices cdx utilizados no mediator, assim altero primeiro neles depois exporto pro mediator.

Ao importar um arquivo dbf para o Mediator a ordem é esta:
- dbf2med <banco> - Cria Estrutura
- ntx2med ou cdx2med <banco> <indices> - Cria os indices
- dat2med - Importa os registros
Nunca crie os indices depois que estiver com os registros levará relativamente mais tempo para criá-los.

No Mysql vc pode usar a função date_format(<data>,'%Y%m%d') dessa forma vc pode comparar com variaveis com a função dtos().
Em relátorios filtrados ou consultas em bancos grandes prefira usar instruções Sql como exemplo abaixo

Exemplo Mediator xharbour

Código: Selecionar todos

   cVar := dtos(date())
   cCmd := "'"+"SELECT CODIGO,DATA FROM BANCO where date_format(DATA'%Y%m%d')  >= '"+cVar+"'"      
   use medquery as &cCmd New ScrollAble
   
Se você estiver usando o Mysql para interagir informações com site.
Você terá que criar indices no Mysql Query Browser.
Visualize como os indices são criados com o Mediator vá no Mysql Query Browse

show index from (seubanco)

Você verá que os indices são criados amarrados com o campo Recno, esse campo correponde a posicao do registro quando vc utilizava dbf, se você rodar uma instrução sql com filtro por exempo num site esses indices não te ajudarão e poderão deixar a apresentação do resultado demorada.

Para criar os indices no Mysql
Create index <nomeindice> on <banco> (campos)

Nos meus sites como não apresento visualização detalhada é sim sintética mais voltada a estatistica.
Uso mtos selects com group by ...having...
Se você usar mtos relacionamentos inner join...left join...e os campos relacionais não tiverem indices...você notará a lerdeza que é o trem...
Tipo...

Código: Selecionar todos

    select a.codigopro, b.descricao, sum(qtdvendida) from vendas a
       inner join on tabeladeproduto b on (a.codigopro=b.codigopro)
       group by a.codigopro,b.descricao
       having sum(qtdvendida) > 100 
       order by b.descricao
   
Mostrar produtos que venderam mais de 100 unidades relacionando a tabela de vendas com a tabela de produtos....


________________________________________________________________________________________________________
(Aow Saudade) Clipper 5.2e, Blinker 7, RDD SIXNSX, DBFCDX /Xharbour 1.0, Rdd Mediator (Mysql) Free , RDD Sqlrdd (Sql Server) Comercial
(Hoje) C# Python Sql Server e Oracle




Responder