TRIM NA FRASE SQL DO ORACLE CAUSA LENTIDÃO
Bom dia para todos.
tenho esse simples select mas com TRIM em COD_EMPRESA e COD_ITEM.
SELECT PRE_UNIT_ULT_COMPR FROM ITEM_SUP IT WHERE TRIM(COD_EMPRESA) = [ô]45[ô] AND TRIM(COD_ITEM) = [ô]1485AB[ô]
esse SQL demora 10 segundos para ser executado.
Se eu tirar os TRIM
SELECT PRE_UNIT_ULT_COMPR FROM ITEM_SUP IT WHERE COD_EMPRESA) = [ô]45[ô] AND COD_ITEM = [ô]1485AB[ô]
esse SQL leva 0,15 segundos para executar, ou seja, um raio.
Pergunta: é normal isso ?
Porque o uso do TRIM ?
R: Porque faço consulta em um ERP (Logix) onde pode acontecer desse ERP grava espaço em branco junto com o valor e já peguei um caso assim.
tenho esse simples select mas com TRIM em COD_EMPRESA e COD_ITEM.
SELECT PRE_UNIT_ULT_COMPR FROM ITEM_SUP IT WHERE TRIM(COD_EMPRESA) = [ô]45[ô] AND TRIM(COD_ITEM) = [ô]1485AB[ô]
esse SQL demora 10 segundos para ser executado.
Se eu tirar os TRIM
SELECT PRE_UNIT_ULT_COMPR FROM ITEM_SUP IT WHERE COD_EMPRESA) = [ô]45[ô] AND COD_ITEM = [ô]1485AB[ô]
esse SQL leva 0,15 segundos para executar, ou seja, um raio.
Pergunta: é normal isso ?
Porque o uso do TRIM ?
R: Porque faço consulta em um ERP (Logix) onde pode acontecer desse ERP grava espaço em branco junto com o valor e já peguei um caso assim.
Colega,
Não conheço a sintaxe no SQL Server, mas no PostGreSQL há o CAST para converter a string em número (no seu caso).
Problema é que o CAST provavelmente vai considerar como 0 (zero) algum código de empresa que tenha espaço em branco no inÃcio.
Se puderes, faz um teste.
Tudo de bom.
Não conheço a sintaxe no SQL Server, mas no PostGreSQL há o CAST para converter a string em número (no seu caso).
Problema é que o CAST provavelmente vai considerar como 0 (zero) algum código de empresa que tenha espaço em branco no inÃcio.
Se puderes, faz um teste.
Tudo de bom.
Seu caso é mais complicado do que pode parecer à primeira vista. Quando você usa uma função como o trim, ela é aplicada à coluna inteira da tabela e não somente ao produto cartesiano. Ou seja, você está selecionando uma ou duas linhas, mas você precisa aplicar a função trim à coluna inteira. E quanto maior a tabela mais vai demorar. Quando passei por uma situação dessas, o que fiz foi recompor a cláusula where usando o espaço normalmente, ou seja, sem o trim, especificando as colunas e nelas sim aplicando o trim:
select trim(coluna1), coluna2, trim(coluna3) from tabela where (coluna1 = [ô] abc[ô] or coluna1 = [ô]abc[ô]) and (coluna3 = [ô] xyz[ô] or coluna3 = [ô]xyz[ô])
Colega,
Em complemento ao que o colega Kerplunk escreveu, tente aplicar o Trim somente no resultado, usando uma subquery, ou seja, você seleciona sem o TRIM e apenas no resultado aplica a função de remoção de espaços.
Eu NÃO testei aqui, mas veja se funciona algo como...
Tudo de bom.
Em complemento ao que o colega Kerplunk escreveu, tente aplicar o Trim somente no resultado, usando uma subquery, ou seja, você seleciona sem o TRIM e apenas no resultado aplica a função de remoção de espaços.
Eu NÃO testei aqui, mas veja se funciona algo como...
SELECT Query01.* from
(SELECT PRE_UNIT_ULT_COMPR, COD_EMPRESA as C_EMP FROM ITEM_SUP IT WHERE COD_EMPRESA) = [ô]45[ô] AND COD_ITEM = [ô]1485AB[ô]) as Query01
WHERE
TRIM(C_EMP)=[ô]45[ô]
Tudo de bom.
Estranho e eu não consigo entender. O TRIM esta no campo (COD_EMPRESA) e (COD_ITEM) e com isso o Select fica lerdo.
Se eu retirar o TRIM somente do campo (COD_EMPRESA) fica rápido, mas o (COD_EMPRESA) sempre e será 2 caracteres, tipo: 01,02,AB,A1, então não sei o porque desse TRIM no campo (COD_EMPRESA).
Se eu retirar o TRIM somente do campo (COD_EMPRESA) fica rápido, mas o (COD_EMPRESA) sempre e será 2 caracteres, tipo: 01,02,AB,A1, então não sei o porque desse TRIM no campo (COD_EMPRESA).
Tópico encerrado , respostas não são mais permitidas