Comando SQL x XBASE

Forum sobre SQL.

Moderador: Moderadores

Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Comando SQL x XBASE

Mensagem por sygecom »

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
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 »

sygecom, me desculpe, mas não entendi, o que vc sugere?
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á!

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)
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á alxsts, eu tenho indices na tabela sim, são esses:
indices.png
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á!

Pode postar o comando SQL?
[]´s
Alexandre Santos (AlxSts)
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 »

USE tab AS "select * from MEDIATOR.GRUPOS t where exists ( select recno from MEDIATOR.DBTMARK where recno = t.recno )" PERMANENT
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 »

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 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/
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á!

Experimente este:

Código: Selecionar todos

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

Código: Selecionar todos

SELECT * FROM ...
Prefira nomear as colunas:

Código: Selecionar todos

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)
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 »

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 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á pessoal, obrigada pelas dicas, vou fazer os testes!
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 »

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
paiva_dbdc
Usuário Nível 3
Usuário Nível 3
Mensagens: 342
Registrado em: 12 Nov 2012 09:58
Localização: uberlandia mg

Comando SQL x XBASE

Mensagem por paiva_dbdc »

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
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 »

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

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.
Saudações,
Itamar M. Lins Jr.
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 seria a necessidade do DbSkip(-1)? Teu sistema roda em Windows ou Linux/Unix?
[]´s
Alexandre Santos (AlxSts)
Responder