Clipper On Line • Ver Tópico - Comando SQL x XBASE

Comando SQL x XBASE

Discussão sobre SQL

Moderador: Moderadores

 

Comando SQL x XBASE

Mensagempor sygecom » 15 Jun 2015 15:49

O simples fato de nao ter uma relação de chave primaria e estrangeira no DBF já é um grande motivo para migrar para SQL com tudo bem amtrado.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
leonardodemachado@hotmail.com

Faça você também sua doação esse fórum é uma lenda viva: http://www.pctoledo.com.br/doacao
Avatar de usuário

sygecom
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 7006
Data de registro: 21 Jul 2006 10:12
Cidade/Estado: Alvorada-RS
Curtiu: 1 vez
Mens.Curtidas: 130 vezes

Comando SQL x XBASE

Mensagempor Karine Lima Almeida » 15 Jun 2015 16:04

sygecom, me desculpe, mas não entendi, o que vc sugere?
Avatar de usuário

Karine Lima Almeida
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 25
Data de registro: 27 Set 2013 10:38
Cidade/Estado: Limeira-SP
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Comando SQL x XBASE

Mensagempor alxsts » 15 Jun 2015 16:12

Olá!

Seja bem-vinda ao fórum Karine!

Como devem saber, em um SGBD a performance está intimamente ligada ao modelo de dados. Como estão os índices das tabelas usadas nesta consulta, se é que existem? Procure criar índices nas tabelas para as colunas envolvidas na cláusula WHERE.
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

Comando SQL x XBASE

Mensagempor Karine Lima Almeida » 15 Jun 2015 16:30

Olá alxsts, eu tenho indices na tabela sim, são esses:

indices.png
Avatar de usuário

Karine Lima Almeida
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 25
Data de registro: 27 Set 2013 10:38
Cidade/Estado: Limeira-SP
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Comando SQL x XBASE

Mensagempor alxsts » 15 Jun 2015 17:23

Olá!

Pode postar o comando SQL?
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

Comando SQL x XBASE

Mensagempor Karine Lima Almeida » 15 Jun 2015 17:50

USE tab AS "select * from MEDIATOR.GRUPOS t where exists ( select recno from MEDIATOR.DBTMARK where recno = t.recno )" PERMANENT
Avatar de usuário

Karine Lima Almeida
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 25
Data de registro: 27 Set 2013 10:38
Cidade/Estado: Limeira-SP
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Comando SQL x XBASE

Mensagempor JoséQuintas » 15 Jun 2015 18:19

Se entendi direito, o comando vai fazer 1 milhão de pesquisas.

Apenas tentativas:

SELECT * FROM GRUPOS WHERE recno IN ( SELECT RECNO FROM DBTMARK )

Pelo menos ao invés de pesquisar cada código, carregaria uma lista. (dependendo do tamanho da segunda tabela)

SELECT * FROM GRUPOS LEFT JOIN DBTMARK ON GRUPOS.RECNO = DBTMARK.RECNO

De qualquer jeito, no mínimo o servidor vai percorrer 1 milhão de registros, e depende da estrutura.
Por exemplo, tabelas com TEXT com muito conteúdo, é demorado.

E dependendo do tamanho do resultado, vai precisar muita memória no servidor.

Difícil imaginar aonde usaria esse resultado, caso seja 1 milhão de registros.

Aliás... se quer saber os códigos que existem em dbtmark, não seria mais prático...

SELECT DISTINTIC RECNO FROM DBTMARK
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18010
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Comando SQL x XBASE

Mensagempor alxsts » 15 Jun 2015 18:27

Olá!

Experimente este:
USE tab AS "SELECT * FROM MEDIATOR.GRUPOS t JOIN (SELECT recno FROM MEDIATOR.DBTMARK) t1 ON t.recno = t1.recno)" PERMANENT
É recomendável não usar
SELECT * FROM ...
Prefira nomear as colunas:
SELECT col1, col2 ... coln FROM tabela...


Obs:
- não testei o SQL acima. Pode haver erros...
- não conheço Mediator.
- se persistir a lentidão, faça um teste com ADO em um programa separado, para medir a performance e comparar.
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

Comando SQL x XBASE

Mensagempor JoséQuintas » 15 Jun 2015 18:32

Complementando:
Se a intenção é pegar os dados da primeira tabela, com código cadastrado na segunda, pode ser interessante inverter, caso a segunda tabela seja menor.

SELECT [lista de campos] FROM DBMARK INNER JOIN GRUPOS ON DBMARK.RECNO = GRUPOS.RECNO

Desta forma já tem os códigos que interessam, e só pesquisa os dados na primeira tabela.

Supondo que a primeira tabela tenha um milhão de registros, e a segunda tenha apenas um, vai substituir um milhão de pesquisas por apenas uma.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18010
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Comando SQL x XBASE

Mensagempor Karine Lima Almeida » 16 Jun 2015 08:32

Olá pessoal, obrigada pelas dicas, vou fazer os testes!
Avatar de usuário

Karine Lima Almeida
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 25
Data de registro: 27 Set 2013 10:38
Cidade/Estado: Limeira-SP
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Comando SQL x XBASE

Mensagempor janio » 16 Jun 2015 10:09

Karine,

Um outro teste que vc pode fazer qndo notar alguma lentidão eh fazer a consulta no seu banco pelo HeidSql e ver qnto tempo levou... e depois fazer a mesma consulta pelo mediator e verificar se houve diferença no tempo de processamento.

Dessa forma da pra ter uma ideia de onde está o problema!
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1835
Data de registro: 06 Jul 2004 07:43
Cidade/Estado: UBAJARA - CE
Curtiu: 8 vezes
Mens.Curtidas: 68 vezes

Comando SQL x XBASE

Mensagempor paiva_dbdc » 16 Jun 2015 10:32

BOm dia.

testei varias vezes com Mysql, Fire e Postgres e realmente ta difícil mudar do DBF.

Mais rápido, MUITO mais simples etc etc.

uso tudo em TS.

MAIS a minha duvida é sobre uma informação que tive.

me falaram que mesmo em DB existe problema de Índices e que o IDEAL seria não usar índices.
mais se não houver índices as Pesquisas seriam + lentas então seria tipo uma sinuca de bico (rs)

ou este problema de índice é devido ao PRODUTO que a pessoa esta usando e que relatou este fato ?

PAiva
paiva_dbdc
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 342
Data de registro: 12 Nov 2012 08:58
Cidade/Estado: uberlandia mg
Curtiu: 0 vez
Mens.Curtidas: 6 vezes

Comando SQL x XBASE

Mensagempor Karine Lima Almeida » 16 Jun 2015 11:37

janio,

então é assim,
USE qry AS "SELECT * FROM MEDIATOR.GRUPOS WHERE SITUACAO='1' order by CIDADE " // SEM O SCROLLABLE APENAS 1,5 SEGUNDOS

//45,623 total registros
-----------------------------------------------------
USE qry AS "SELECT * FROM MEDIATOR.GRUPOS WHERE SITUACAO='1' order by CIDADE " SCROLLABLE // com SCROLLABLE cerca de 19 segundos.

//45,623 total registros

eu não tenho duvidas de que é o SCROLLABLE que torna o resultado mais lento, porém se eu não usa-lo, INDEXKEY() não é definido, o skip -1 não funciona, entre outras funções que deixam de funcionar.
Avatar de usuário

Karine Lima Almeida
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 25
Data de registro: 27 Set 2013 10:38
Cidade/Estado: Limeira-SP
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Comando SQL x XBASE

Mensagempor Itamar M. Lins Jr. » 16 Jun 2015 12:39

Bom se, é assim, vai cair naquela mesma coisa que eu já falei aqui... Lógica do DBF nos SGBD´s da vida, é um problema a longo prazo.
Seria bom ver isso com SQLMIX, já que não usa nada disso que o pessoal do Mediator usa.
As poucas consultas que fiz usando SQLMIX foram praticamente instantâneas.

É o caso das outras coisas que essas lógicas tem que fazer, DELETED, RECNO, RLOCK, ETC... tudo isso tem que ser verificado, criado, atualizado... ai fica mais lento.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Comando SQL x XBASE

Mensagempor alxsts » 16 Jun 2015 13:34

Olá!

Qual seria a necessidade do DbSkip(-1)? Teu sistema roda em Windows ou Linux/Unix?
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

Anterior Próximo



Retornar para SQL

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 8 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro