Comando SQL x XBASE

Forum sobre SQL.

Moderador: Moderadores

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

Comando SQL x XBASE

Mensagem por janio »

Pessoal,

Uso ha alguns anos com sucesso o Mediator para Mysql! O legal desse RDD, assim como de outros semelhantes, eh que eles nos dão a oportunidade de escolher se continuamos usando comando xbase ou sql. Comecei minha vida de programação com xbase e este eh para mim a oitava maravilha do mundo. Ocorre parece haver em nós um certo complexo de inferioridade qndo usamos comandos xbase e achamos q aqueles q usam comandos sql estão em outro nivel, outro patamar, que deixou coisas "velhas" e agora ta na "modernidade".

Pois bem! Resolvi trocar os comandos xbase em alguns relatorios para sql. O resultado foi destroso qndo testei em uma base de dados mediana. Sql comeu poeira: 52 segundos para mostrar o relatorio na tela! Ja qndo usei comandos xbase... 2 segundos! eh uma diferença enoooooormeeeeeee!

Pode ser pq eu nao domine sql... quem sabe! Pode ser tbm que tenha a ver como os meus índices estao criados. Sinceramente, não sei. O que sei eh q de 52 segundos para apenas 2... eh de estranhar!

Em Sql

Código: Selecionar todos

	cQuery = "SELECT a00ecf.marecf, a00ecf.nrfecf, a00ecf.identi, " + ;
	         "SUM(a03ped.TOTPED) as Total " + ;
	         "FROM a03ped " + ;
	         "INNER JOIN a00ecf ON ( a03ped.ecfnrf=a00ecf.nrfecf ) " + ;
	         "WHERE a03ped.is_deleted = 'N' AND a03ped.flgcan='N' AND a03ped.datemi>='&vDataI_' AND a03ped.datemi<='&vDataF_'" + ;
	         "GROUP BY a03ped.ecfnrf"

	GERA_TAB()		
	use &dbftmp as cQuery NEW SCROLLABLE
	DbGoTop()
	
	Do While !Eof()
	
		nTotalGeral += total

	   @ PROW() + 01, 01 SAY NRFECF
	   @ PROW()     , 23 SAY Left(MARECF,15)
	   @ PROW()     , 45 SAY IDENTI
	   @ PROW()     , 66 SAY Total         Pict "@E 99,999,999.99"
	
		DbSkip()
		
	Enddo

	Use
	  
   @ PROW() + 01, 50 SAY "Total --->>>"
   @ PROW()     , 65 SAY nTotalGeral     Pict "@E 999,999,999.99"
Em xBase

Código: Selecionar todos

	aCampos := {} 
	aAdd( aCampos , { "NRFECF" , "C" , 21 , 0 } )
	aAdd( aCampos , { "MARECF" , "C" , 15 , 0 } )
	aAdd( aCampos , { "IDENTI" , "C" , 15 , 0 } )
	aAdd( aCampos , { "TOTAL"  , "N" , 15 , 2 } )

   dbCreate( "mem:test", aCampos, "DBFCDX" , .T., "memarea" )

   INDEX ON NRFECF TAG CHAVE1

   SELECT PEDIDO
   DBSETORDER(7)
   DBGOTOP()
   OrdScope( 0, Dtos(vDATAi) )
   OrdScope( 1, Dtos(vDATAf) )
   DBGOTOP()
   Do While !Eof()
      
		If FlgCan = "S"
			DbSkip()
			Loop
		Endif

		If EcfFab != pedido->ecfnrf
			Select Ecf
			DbSetOrder(2)
			DbGoTop()
			DbSeek( pedido->ecfnrf )
		Endif
		
		EcfFab = pedido->ecfnrf
		
		Select MemArea
		DbAppend()
		replace NRFECF with pedido->ECFNRF ,;
				  MARECF with ecf->marecf    ,;
				  IDENTI with ecf->identi    ,;
				  TOTAL  with pedido->TOTPED
			
		Select Pedido
		DbSkip()
			
	Enddo
			
   OrdScope( 0, nil )
   OrdScope( 1, nil )

	Select MemArea
   DBSETORDER(1)      
   GOTO TOP	
	Do While !Eof()
	
		xEcf = NrfEcf
		xTotal = 0

	   @ PROW() + 01, 01 SAY NRFECF
	   @ PROW()     , 23 SAY Left(MARECF,15)
	   @ PROW()     , 45 SAY IDENTI
		
		Do While xEcf = NrfEcf
		
			xTotal = xTotal + Total
			
			DbSkip()
			
		Enddo

		nTotalGeral += xtotal

	   @ PROW()     , 66 SAY xTotal         Pict "@E 99,999,999.99"
			
	Enddo
	  
	Close memarea
  	dbDrop( "mem:test" )  // Free memory 

   @ PROW() + 01, 50 SAY "Total --->>>"
   @ PROW()     , 65 SAY nTotalGeral     Pict "@E 999,999,999.99"
Indices

Código: Selecionar todos

            INDEX ON PEDIDO                           TAG CHAVE1
            INDEX ON STR(CODCLI)+DTOS(DATEMI)         TAG CHAVE2
            INDEX ON FLGIMP                           TAG CHAVE3
            INDEX ON STR(CODVED)+DTOS(DATEMI)         TAG CHAVE4
            INDEX ON STR(CODPRZ)+DTOS(DATEMI)         TAG CHAVE5
            INDEX ON STR(CODCLI)+DESCEND(STR(PEDIDO)) TAG CHAVE6
            INDEX ON DTOS(DATEMI)                     TAG CHAVE7
            INDEX ON ECFNRF+Dtos(EMIDAT)+Str(COONUM)  TAG CHAVE8
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
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Comando SQL x XBASE

Mensagem por janio »

Esclarecendo:

A tabela teste tem quase UM MILHAO de registros! Porém eu pedi o relatorio de apenas uma data que tem cerca de 3000 registros!
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Comando SQL x XBASE

Mensagem por alxsts »

Olá!

Qual gerenciador de banco de dados você usa?
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Comando SQL x XBASE

Mensagem por janio »

Ola,

HeidSql 8.3
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
Poka
Usuário Nível 4
Usuário Nível 4
Mensagens: 563
Registrado em: 25 Out 2004 21:26
Localização: Leme/SP

Comando SQL x XBASE

Mensagem por Poka »

Janio, falando em velocidade, estou começando a mexer com Firebird + odbc.
Fiz um teste simples somente criando uma tabela com campo codigo e inserindo 100.000 registros. No Firebird demora +- 3 minutos, no Harbour+dbf 3 (TRES) SEGUNDOS.

Poka.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Comando SQL x XBASE

Mensagem por alxsts »

Olá!

HeidiSQL é uma ferramenta para manejo e administração de bancos de dados.

Um Sistema Gerenciador de Banco de Dados Relacional (SGBDR) é o software que gerencia suas instâncias nos servidores.

Com o HeidiSQL, você pode manejar instâncias dos SGBDRs MySQL e MS SQL Server.

Qual delas você está utilizando?
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Comando SQL x XBASE

Mensagem por janio »

Oxente,

Na primeira msg deixei claro que uso MYSQL!

Janio
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
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Comando SQL x XBASE

Mensagem por Itamar M. Lins Jr. »

Esta velocidade é lenda.
Na época tudo era DBF ou COBOL, o SQL era para os eleitos... até onde sei no COBOL era criado tudo pelo programador não tinha RDD
Era melhor quando em rede PONTO a PONTO o pessoal do SQL ria dos DBF´s corrompia indices uma bagunça, estragava o HEAD do DBF etc...
Mas era uma questão da arquitetura CLIENTE/Servidor, não um problema do DBF em si, depois com o ADS, CACHÉ e outros com uso via TCP/IP parou esses problemas.
o Dbf é rápido para o propósito que foi feito, não perde p/ SQL, o problema é que não tinha os motores (LetoDB, NetIO...) para DBF em rede.
Agora podemos discutir no bom sentido os comandos do SQL que não tem no DBF, mas que não é uma limitação do DBF e sim dos motores(daemons) no ADS podemos usar sintaxe SQL... o pessoal sente falta dos INNER JOINS... mas como tudo tem os prós e contras. Eu por exemplo não fico com desdém de quem usa DBF eu uso, tem muita gente usando SQL e não sabe metade das coisas de quem usa DBF. Por exemplo criando campos desnecessários gigantes, abusando dos processadores, megalomaníacos do SQL..., compram o RDDSQL e depois são ensinados a remover, os "Do wihile" por "SELECT", "REPLACE" por "UPDATE" e assim vão trocando tudo por SQL, era melhor usar logo SQLMIX que é gratuito, ou ADO entre outros. Porque não adianta só colocar duas linhas e dizer agora eu uso SQL, é preciso fazer toda uma adaptação, remodelar tudo para tirar proveito e se não fazer isso não adianta. No meu ponto de vista é redundância, usar conversor de sintaxe DBF p/ SQL, é comprar Ferrari p/ andar em estrada de barro.

A manutenção do MySQl, Postgree não se compara com DBF, para quem sabe trabalhar com DBF, está cada vez mais difícil abandona-los temos boas ferramentas.

Dois top de linha que usam DBF

http://www.intersystems.com/our-product ... -overview/
http://scn.sap.com/community/ads

Pena que são caros.

Eu vou de LetoDB por enquanto.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Comando SQL x XBASE

Mensagem por janio »

Nao posso dizer que sei programar e muito menos que 'sei' trabalhar com dbf, até pq programo por hobby e não como meio de vida.

Mas desde comecei com este negocio q NUNCA tive índices corrompidos, nunca tive perda de dados... nunca tive problemas nenhum com dbf. Fui para MySql com Mediator por justamente achar q quem usa dbf ta 'atrasado'. Nessa época não tinha o LetoDB e nem esse negocio de criar dbf na memoria, isso eh o maximo!

Se fosse hj continuaria com dbf em todos os meus sistemas!

Mininuuuu tu precisa ver o que eh sofrimento eh qndo precisamos restaurar algum backup em mysql. Pelo amor de Deus! Eh o dia inteirim recriando os índices, enquanto q o mesmo serviço, se em dbf fosse, seria alguns minutos.

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
frazato
Usuário Nível 3
Usuário Nível 3
Mensagens: 219
Registrado em: 08 Jul 2004 07:45

Comando SQL x XBASE

Mensagem por frazato »

Boa tarde! também faço parte de pessoal que já inicie o processo de mudar de DBf para SQL usando na epoca o MEDIATOR, ficou muito lento na época e acabei desistindo, hoje tenho um sistema de ERP para supermercado com base DBF/CDX com mais de 12 milhões de registro e um 1gb de tamanho sem nenhum problema de indice ou velocidade, uso atualmente GTWVW e xharbour 0.99.70 todos os terminais fazem acesso remoto usando o GO-Global com velocidade muito rápida tanto pra consulta quanto para geração de relatórios.

Tenho um terminal de cotação online para digitação de preço fora do mercado usando LETODB ( fantástico) muito rápido, baste apenas pegar as funções e gerar um executável aparte usando o LETODB+harbour e libere o acesso ao servidor pela porta compartilhando os dados locais ou seja tenho um terminal 100% online.

Nunca tive problema de quebra de indice ou perda de dados. Tive que fazer ajustes no sistema pra trabalhar usando GO-Global, imagine que você tem vários usuarios usando ao mesmo tempo a mesma maquina, no meu caso crie pastas temporarias de acordo com a variavel de usuario.

Todo a parte de configuração e montagem do servidor foi feita por uma amigo meu de São josé dos campos ( Matriz nossa ) a parte de impressão e normal, gero o arquivo txt de sai e depois imprimo ou pela ltp ou pelo win_prn.

Frazato
Anexos
tela_foruma.jpg
paiva
Usuário Nível 3
Usuário Nível 3
Mensagens: 300
Registrado em: 04 Ago 2005 10:28

Comando SQL x XBASE

Mensagem por paiva »

BOM dia.

Gostaria de tirar uma DUVIDA. Referente ao tema.

Pessoalmente uso em TODOS os clientes o TS (2003 2008) OU um programa gerenciador de MULTI TASK que funciona em xp W7 etc http://deepxw.blogspot.com.br/2009/04/u ... patch.html

em REDE o sistema fica uma carroça por este motivo Não utilizo desta forma.

DUVIDA em LETODB ou NETBIOS ou outros como funcionam de FATO ?

ex: se acesso pela rede uma base GRANDE e vou lendo reg a reg e montando um relatório,
os registros UM a um NAO seriam transportados para o TERMINAL para o Prg selecionar e ver o que fazer com ele ?

SOMENTE seria processado no servidor ALGUNS comandos ? Tipo reindexação

SE tiver uma forma OTIMA para usar em rede usando algum desses produtos, Poderia coexistir na forma de acesso por TS e por este produto em REDE ?

Desde já agradeço
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Comando SQL x XBASE

Mensagem por rochinha »

Amiguinhos,

Janio, como você tem certeza que mesmo usando o Mediator, no momento da filtragem é este RDD que está ativo?

O RDDCDX por natividade pode estar sendo carregado e atrapalhando o RDD Mediator. Quando voce comanda USE arquivo INDEX indice TAG nometag, este comando está mesmo sendo usado pelo RDD Mediator?

O fato de levar menos tempo, pode ser o RDD nativo trabalhando.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Comando SQL x XBASE

Mensagem por janio »

Rochinha,

Acho q vc não entendeu... minha base de dados eh MySql, ok? Como uso Mediator, posso usar comandos xbase ou fazer as consultas diretamente em comandos sql (Select *).

Postei dois exemplos: Um usando SELECT * FROM bla bla, Outro usando nosso velho Do While (lendo registro a registro). Nas duas maneira a base eh a mesma (MySql), mas na segundo crio um dbf temporário pra facilitar a organização dos dados!

Janio
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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Comando SQL x XBASE

Mensagem por JoséQuintas »

No SELECT de datas, tem que colocar a data no formato do MySql.
Pra facilitar uso algumas funçõeszinhas, por exemplo, DateSql().

Código: Selecionar todos

cSql := "SELECT * FROM banco WHERE data > " + Quoted( DateSql( Data ) )

FUNCTION Quoted( cString )
   RETURN [']  + cString + {'} 

FUNCTION DateSql( dData )
   IF Empty( dData )
       // mysql strict mode
       RETURN "NULL"
       // RETURN Quoted( "0000-00-00" )
   ENDIF
   RETURN Quoted( Transform( Dtos( dData ), "@R 9999-99-99" ) )
Sobre velocidade:
No MySql ou qualquer banco server, tudo funciona até mesmo sem índice.
Se houver índice que agilize a pesquisa, o MySql vai fazer uso dele.
Então pra agilizar é criar índices.

E se usar registro a registro, tipo do while .not. eof(), aí não tem server que deixe rápido.
Tente fazer um SELECT que traga tudo o mais pronto possível.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Karine Lima Almeida
Usuário Nível 1
Usuário Nível 1
Mensagens: 25
Registrado em: 27 Set 2013 10:38
Localização: Limeira-SP

Comando SQL x XBASE

Mensagem por Karine Lima Almeida »

Olá,

Janio, gostaria de saber se você conseguiu resolver o problema da lentidão do sql X comando xbase. Pois enfrento esse mesmo problema!
Minhas querys em sql levam em torno de 12 segundos para um arquivo de 1 milhão de registros, sendo que usando sintaxe xbase, levam 1,5 segundo.
Quando ultilizo somente "Use as "select *" sem o : NEW SCROLLABLE , é um pouco mais rápido, só que eu não posso usar "skip -1", :/
Enfim, tudo tem " um porém" no Mediator pra mim!
Responder