SELECT FULL TABLE SCAN?

 Tópico anterior Próximo tópico Novo tópico

SELECT FULL TABLE SCAN?

SQL / DATABASE

 Compartilhe  Compartilhe  Compartilhe
#493205 - 24/03/2020 08:02:13

MESTRE
GUARULHOS
Cadast. em:Novembro/2013


Fala galera tranquilo? quanto tempo hein..

Estou com um problema, tenho na minha aplicação um Select que ta dando Full Table Scan e ta lascando o processamento do meu banco de dados no Amazon RDS.
gostaria de saber alguma alternativa já que eu não posso alterar ele, eu tomei algumas medidas que deu uma melhorada mas mesmo assim da um pico grande de processamento
quando executa ele e o negócio ta ficando feio..

O que eu fiz: joguei uma variavel com o nome da tabela e separei registros de 2017,2018,2019 e 2020 assim ele da um FullScan numa tabela com menos registros possiveis
(mesmo assim sao em media +50 mil Rows ano)..

Resolveu em partes, porém teria alguma outra forma de eu resolver isso sem mexer nesse Select ??

Citação:
sql = "SELECT CONCAT(os.codigo,os.mes,os.ano),os.Rev,DATE(os.data) AS 'Data de Entrada',orc.dias AS 'Prev. Finalização',os.orcamento,os.item AS 'ITEM INVI',os.`item` AS Item,orc.cliente AS 'Solicitante',orc.solicitante AS 'Interessado',ite.codigoensaio AS 'Codigo do Ensaio',os.impresso,os.Enviado,lb.DataEnviado AS 'Data de Envio',orc.codigo,orc.Mes,orc.Ano,orc.CodCli,orc.CodSol,os.realizado,lb.DataFinalizacao AS 'Data de Finalização',ite.NormaOs AS 'Norma',lb.DataPrevLab AS 'Prev. do Lab.',lb.RespPrevLab,os.codigo seqos,os.mes mesos,os.ano anoos,os.Situacao,lb.DataSaidaAmReceb AS 'Saída do Recebimento',lb.RespSaidaAmReceb,lb.DataEntradaLaboratorio AS 'Entrada da Am. no Laboratório',lb.RespEntrada as RespEntradaAmLab,lb.Andamento STATUS,lb.Status Status2, lb.Laboratorio,lb.DataInicio,lb.DataTermino,lb.RespFinalizacao,lb.RespEnsaio,ite.ProdEnsaiado,CONCAT(ROUND(ite.QtdItem,2),' ',ite.UnidItem) as 'Qtd',lb.Tipo,lb.Categoria,ck.TipoEnsaio as 'Ensaio',lb.PrazoPCP as 'Prazo do PCP',lb.ObsPCP,ck.Pendencia,ck.Resolvida,ck.OS as checklist,lb.IPEM as IPEM,orc.subcontratado,lb.subcontratado as subcontratacao,lb.Data_Subcontratacao,lb.DataFin_Coleta AS 'Finalização da Coleta',lb.RespFin_Coleta AS 'Responsável Fin. Coleta'" &
                      " FROM ordemservicocotacao_hc_copylab orc " &
                      " INNER JOIN ordemservicocotacaoitem_hc_copylab ite ON orc.`codigo`=ite.`Numero` AND orc.`mes`=ite.mes AND orc.ano=ite.`Ano`" &
                      " INNER JOIN  " & Param_Ordemservico_copylab & " os ON  os.seqorc=ite.Numero AND os.`mesorc`=ite.Mes AND os.`anoorc` = ite.Ano AND os.item=ite.item" &
                      " LEFT JOIN  " & Param_Ordemservico_laboratorio & " lb ON os.`codigo` = lb.seq AND os.mes = lb.mes AND os.ano = lb.ano" &
                      " LEFT JOIN  " & Param_Check_list_os & " ck ON ck.OS=lb.OS AND ck.Laboratorio=lb.Laboratorio"


No painel de Performance da Amazon ele me fala:
calls/sec:0.02
avg latency (ms)/call:3047.16
rows examined/call:2174697.73

Abraços galera..

_______________________________________________
"A alegria está na luta, na tentativa, no sofrimento envolvido e não na vitória propriamente dita."
Gandhi.


#493212 - 24/03/2020 12:31:05

ROGERIOLIMAB
RIO DE JANEIRO
Cadast. em:Março/2020


Fala Mestre, boa tarde,
Se todos as relações da sua query estiverem corretas, não há motivos para esta query, que não é complexa, dar FULL TABLE SCAN.
Minhas sugestões:
1) Reveja os relacionamentos entre as tabelas num cenário, por exemplo de somente 10 clientes, e confirme se não existem dados repetidos por falta de relações entre campos.
2) Neste contexto, não importa muito o que a query vai retornar de campos, e sim, se a quantidade de registros. Desta forma, vá executando a query adicionando tabela a tabela, até chegar ao FULL TABLE SCAN e, a princípio, saberá em qual relacionamento esta ocorrendo o problema.

Espero ter ajudado,

Abraços,

Rogerio
  

Abs,
Rogerio de Lima

#493213 - 24/03/2020 12:54:16

LVFIOROT
SERRA
Cadast. em:Março/2012


Até onde tenho conhecimento, para evitar o full scan, precisar criar índices com pelo menos com as condições que são fixas da where (geralmente data, empresa, equipamento, etc....)




#493220 - 24/03/2020 18:16:54

MESTRE
GUARULHOS
Cadast. em:Novembro/2013


Citação:
:
Fala Mestre, boa tarde,
Se todos as relações da sua query estiverem corretas, não há motivos para esta query, que não é complexa, dar FULL TABLE SCAN.
Minhas sugestões:
1) Reveja os relacionamentos entre as tabelas num cenário, por exemplo de somente 10 clientes, e confirme se não existem dados repetidos por falta de relações entre campos.
2) Neste contexto, não importa muito o que a query vai retornar de campos, e sim, se a quantidade de registros. Desta forma, vá executando a query adicionando tabela a tabela, até chegar ao FULL TABLE SCAN e, a princípio, saberá em qual relacionamento esta ocorrendo o problema.

Espero ter ajudado,

Abraços,

Rogerio
  

Vou seguir sua dica!! e tentar obrigado!!

Citação:
:
Até onde tenho conhecimento, para evitar o full scan, precisar criar índices com pelo menos com as condições que são fixas da where (geralmente data, empresa, equipamento, etc....)

Então como cria indices corretamente eu ate cheguei a criar alguns indices porem sem sucesso..

_______________________________________________
"A alegria está na luta, na tentativa, no sofrimento envolvido e não na vitória propriamente dita."
Gandhi.


#493229 - 25/03/2020 09:23:24

LVFIOROT
SERRA
Cadast. em:Março/2012


Os campos que estão no inner/left join precisam estar com indices criados tambem.
Outro problema pode ser o left, pois mesmo se nao tiver o resultado, será processado os registros da "Esquerda"



#493231 - 25/03/2020 18:17:23

WEBMASTER
CURITIBA
Cadast. em:Janeiro/2001


Membro da equipe
Teoricamente teu problema esta nas ligações (joins) das tabelas.
Uma coisa que ajuda  pra @#@#$!#@ é uma coisa muito besta, mas quando a gente aprende a dar valor nela...nossa senhora.
Dá um explain no teu sql

De:
select * from a inner join b on a.campo = b.campo

Para:
explain select * from a inner join b on a.campo = b.campo


Eu mesmo ja achei cada M por causa de conexoes mal feitas ou mesmo campos que estavam no where, e que nao eram necessarios, caindo por exemplo de 11segundos de payload para 0.11ms de payload.
Use o explain, ele é teu amigo, teu chapa, teu camarada , mas fala haramaico, entao o problema e entender 'como' ele fala, depois que voce entende tudo fica facil.

WebMaster - VBMania

Nao me mande e-mail com duvidas
Para isso e que existe o forum do VBMania !!!

 Tópico anterior Próximo tópico Novo tópico


Para responder este tópico o login é requerido
Se você já possui uma conta de usuário por favor faça seu login
Se você não possui uma conta de usuário use a opção Criar usuário