Trazendo string parcial
Moderador: Moderadores
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Trazendo string parcial
Tem uma coisa que eu não tinha pensado antes:
Tenho lá no browse
SELECT CDNOME, CDENDERECO FROM CLIENTES...
Mas na hora de mostrar, mostro Left( nome, 25 ) e Left( endereco, 25 )
Imagino que ficaria melhor/mais rápido assim:
SELECT LEFT( CDNOME, 25 ) AS NOME, LEFT( CDENDERECO, 25 ) AS ENDERECO FROM CLIENTES...
Imagino que, apesar de ter "cálculo", vai ser menos informação trafegando.
Estou certo?
Tenho lá no browse
SELECT CDNOME, CDENDERECO FROM CLIENTES...
Mas na hora de mostrar, mostro Left( nome, 25 ) e Left( endereco, 25 )
Imagino que ficaria melhor/mais rápido assim:
SELECT LEFT( CDNOME, 25 ) AS NOME, LEFT( CDENDERECO, 25 ) AS ENDERECO FROM CLIENTES...
Imagino que, apesar de ter "cálculo", vai ser menos informação trafegando.
Estou certo?
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/
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/
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Trazendo string parcial
Sim,para mim faz todo sentido, tenho alterado aos poucos algumas sintaxe xbase para uso SQL direto e tenho feito isso também.
Se já pode trazer tudo pronto e ordenado, melhor do que ficar consertando no xbase.
Se já pode trazer tudo pronto e ordenado, melhor do que ficar consertando no xbase.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
Trazendo string parcial
Sim, também uso assim.
Inclusive quando são dados de diversos campos, uso:
SELECT CONCAT(NUMERO, ' - ', REFERENCIA) AS Nome_Artigo
Inclusive quando são dados de diversos campos, uso:
SELECT CONCAT(NUMERO, ' - ', REFERENCIA) AS Nome_Artigo
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Trazendo string parcial
O detalhe especial que mencionei é sobre cortar string.
SELECT NOME FROM CLIENTES
Mas vou usar num tbrowse, somente 25 caracteres
SELECT LEFT( NOME, 25 ) FROM CLIENTES
No TBrowse, de qualquer jeito vou usar Pad( nome, 25 ), porque pode vir menor que isso.
Não se trata de trazer pronto do MySQL, mas de economizar rede/internet pra transferir informação.
o Texto NÃO vai vir exatamente do tamanho que vou usar, mas não vou desperdiçar velocidade de transferência com excesso de informação inútil.
A dúvida é:
Estou reduzindo tempo e tamanho de comunicação...
Mas como saber quando isso é ruim para o servidor? (tempo do servidor).
SELECT NOME FROM CLIENTES
Mas vou usar num tbrowse, somente 25 caracteres
SELECT LEFT( NOME, 25 ) FROM CLIENTES
No TBrowse, de qualquer jeito vou usar Pad( nome, 25 ), porque pode vir menor que isso.
Não se trata de trazer pronto do MySQL, mas de economizar rede/internet pra transferir informação.
o Texto NÃO vai vir exatamente do tamanho que vou usar, mas não vou desperdiçar velocidade de transferência com excesso de informação inútil.
A dúvida é:
Estou reduzindo tempo e tamanho de comunicação...
Mas como saber quando isso é ruim para o servidor? (tempo do servidor).
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/
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/
- alaminojunior
- Colaborador

- Mensagens: 1717
- Registrado em: 16 Dez 2005 21:26
- Localização: Ubatuba - SP
Trazendo string parcial
Acredito que só num banco com uma massa muito grande de dados possa fazer essa aferição e chegar num veredicto.
Como serão menos bytes para transferir via rede,com certeza haverá economia de tempo, então essa questão está quitada.
Com relação ao "esforço" do servidor, eu costumo testar
(no heidisql) as sentenças antes de embutir no prg, sempre procurando trazer os dados no menor tempo possível. Às vezes um detalhezinho faz enorme diferença.
Não sei como o motor do banco trabalha, se ele pega cada campo e depois tira o pedaço (o que a princípio demanda mais esforço) ou só pega o pedaço requisitado ...
Boa pergunta !
Como serão menos bytes para transferir via rede,com certeza haverá economia de tempo, então essa questão está quitada.
Com relação ao "esforço" do servidor, eu costumo testar
(no heidisql) as sentenças antes de embutir no prg, sempre procurando trazer os dados no menor tempo possível. Às vezes um detalhezinho faz enorme diferença.
Não sei como o motor do banco trabalha, se ele pega cada campo e depois tira o pedaço (o que a princípio demanda mais esforço) ou só pega o pedaço requisitado ...
Boa pergunta !
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
MySQL c/ SQLRDD
HwGui + GTWVG
Trazendo string parcial
Fiz um teste com uma bd com mais de 1 milhão de registos.
Ficou mais rápido com o left.
Retornar apenas os 3 primeiros carateres:
Retornar todos os dados do campo:
Ficou mais rápido com o left.
Retornar apenas os 3 primeiros carateres:
Código: Selecionar todos
/* Affected rows: 0 Found rows: 1.661.102 Warnings: 0 Duration for 1 query: 0,000 sec. (+ 1,593 sec. network) */
SELECT LEFT(m.N_SERIE,3)
FROM movimentos m
INNER JOIN movimentos_tipos t ON t.NUMERO=m.TIPO
;
/* Affected rows: 0 Found rows: 1.661.102 Warnings: 0 Duration for 1 query: 0,015 sec. (+ 1,578 sec. network) */
SELECT LEFT(m.N_SERIE,3)
FROM movimentos m
INNER JOIN movimentos_tipos t ON t.NUMERO=m.TIPO
;
/* Affected rows: 0 Found rows: 1.661.102 Warnings: 0 Duration for 1 query: 0,000 sec. (+ 1,515 sec. network) */
SELECT LEFT(m.N_SERIE,3)
FROM movimentos m
INNER JOIN movimentos_tipos t ON t.NUMERO=m.TIPO
;
/* Affected rows: 0 Found rows: 1.661.102 Warnings: 0 Duration for 1 query: 0,000 sec. (+ 1,516 sec. network) */
SELECT LEFT(m.N_SERIE,3)
FROM movimentos m
INNER JOIN movimentos_tipos t ON t.NUMERO=m.TIPO
;
Código: Selecionar todos
/* Affected rows: 0 Found rows: 1.661.102 Warnings: 0 Duration for 1 query: 0,000 sec. (+ 1,516 sec. network) */
SELECT m.N_SERIE
FROM movimentos m
INNER JOIN movimentos_tipos t ON t.NUMERO=m.TIPO
;
/* Affected rows: 0 Found rows: 1.661.102 Warnings: 0 Duration for 1 query: 0,000 sec. (+ 1,609 sec. network) */
SELECT m.N_SERIE
FROM movimentos m
INNER JOIN movimentos_tipos t ON t.NUMERO=m.TIPO
;
/* Affected rows: 0 Found rows: 1.661.102 Warnings: 0 Duration for 1 query: 0,000 sec. (+ 1,609 sec. network) */
SELECT m.N_SERIE
FROM movimentos m
INNER JOIN movimentos_tipos t ON t.NUMERO=m.TIPO
;
/* Affected rows: 0 Found rows: 1.661.102 Warnings: 0 Duration for 1 query: 0,000 sec. (+ 1,610 sec. network) */
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Trazendo string parcial
/* Affected rows: 0 Found rows: 1.661.102 Warnings: 0 Duration for 1 query: 0,000 sec. (+ 1,593 sec. network) */
/* Affected rows: 0 Found rows: 1.661.102 Warnings: 0 Duration for 1 query: 0,000 sec. (+ 1,516 sec. network) */
Não entendi porque somente em um deles mostra 15 milésimos de segundo pro comando.
/* Affected rows: 0 Found rows: 1.661.102 Warnings: 0 Duration for 1 query: 0,015 sec. (+ 1,578 sec. network) */
Tá aí uma boa comparação com DBF
Processou 1.6 milhões de registros, trouxe 1.6 milhões de séries, e demorou 1.5 segundos pela rede.
Pra quem tem dúvida:
1.6 milhões x 3 caracteres x 8 bits = 38.4Mb... numa rede de 100Mb.... 1.5 segundos poderia até ser considerado demorado.
Agora vai processar 1.6 milhões de registros com DBF pra ver o que acontece.... nem faz diferença se é 1 caractere ou o registro inteiro...
E sem filtro, se trouxer só uma parte então... mais rápido ainda.
/* Affected rows: 0 Found rows: 1.661.102 Warnings: 0 Duration for 1 query: 0,000 sec. (+ 1,516 sec. network) */
Não entendi porque somente em um deles mostra 15 milésimos de segundo pro comando.
/* Affected rows: 0 Found rows: 1.661.102 Warnings: 0 Duration for 1 query: 0,015 sec. (+ 1,578 sec. network) */
Tá aí uma boa comparação com DBF
Processou 1.6 milhões de registros, trouxe 1.6 milhões de séries, e demorou 1.5 segundos pela rede.
Pra quem tem dúvida:
1.6 milhões x 3 caracteres x 8 bits = 38.4Mb... numa rede de 100Mb.... 1.5 segundos poderia até ser considerado demorado.
Agora vai processar 1.6 milhões de registros com DBF pra ver o que acontece.... nem faz diferença se é 1 caractere ou o registro inteiro...
E sem filtro, se trouxer só uma parte então... mais rápido ainda.
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/
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/
- susviela@bol.com.br
- Usuário Nível 3

- Mensagens: 236
- Registrado em: 30 Jun 2017 11:17
- Localização: São José / SC
- Contato:
Trazendo string parcial
tonicm escreveu:Tá aí uma boa comparação com DBF
Processou 1.6 milhões de registros, trouxe 1.6 milhões de séries, e demorou 1.5 segundos pela rede.
Pra quem tem dúvida:
1.6 milhões x 3 caracteres x 8 bits = 38.4Mb... numa rede de 100Mb.... 1.5 segundos poderia até ser considerado demorado.
Agora vai processar 1.6 milhões de registros com DBF pra ver o que acontece.... nem faz diferença se é 1 caractere ou o registro inteiro...
E sem filtro, se trouxer só uma parte então... mais rápido ainda.
Opa ........
Mas ai a tua comparação está meia injusta, esse processo em um SGBD (todos os índices, tabelas referênciadas, integridade referencial, usuário, permissões , e Tigers estão ativos e em processamento )
.
.
"E quando você perder o controle, colherá o que plantou."
=========================================
Carlos Alberto Nunes #Susviela
Site: https://www.PowerInformatica.com.br
=========================================
Blog xBase: https://programandoxbase.wordpress.com/
Blog TI: https://susviela.wordpress.com
( #ProgramandoxBase #AllxBase )
.
"E quando você perder o controle, colherá o que plantou."
=========================================
Carlos Alberto Nunes #Susviela
Site: https://www.PowerInformatica.com.br
=========================================
Blog xBase: https://programandoxbase.wordpress.com/
Blog TI: https://susviela.wordpress.com
( #ProgramandoxBase #AllxBase )
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Trazendo string parcial
Não está não.susviela@bol.com.br escreveu:Mas ai a tua comparação está meia injusta, esse processo em um SGBD
O objetivo é justamente chamar a atenção para a diferença do uso da rede.
Na prática... é pior... esqueci desta parte:
Vamos considerar 10 terminais emitindo um relatório...
Num relatório de 15 minutos em DBF, os 10 terminais vão estar usando a rede durante os 15 minutos, consultando até o que não interessa, e um atrasando o outro.
Em SQL vai levar esses 1.5 segundos... significa que a rede vai ficar mais de 14 minutos totalmente livre, aguardando mais comandos SQL.
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/
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/
