¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Como melhorar o desempenho de uma consulta SQL complexa: Dicas e melhores práticas.

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 2 Vistas
0
Cargando...

Pode alguém me orientar sobre como escrever a seguinte consulta para obter um melhor desempenho? Posso usá-la para todas as entradas ou devo dividi-la?

Por favor, compartilhem suas opiniões.

SELECT DISTINCT werks matnr b~stlal idnrk postp d~aennr
            sortf potx1 c~lkenz b~stlty stlst
            INTO TABLE ltab_one
            FROM mast AS a INNER JOIN stko AS b
            ON a~stlnr = b~stlnr
            AND a~stlal = b~stlal
            INNER JOIN stas AS c
            ON b~stlnr = c~stlnr
            AND b~stlal = c~stlal
            AND b~stlty = c~stlty
            INNER JOIN stpo AS d
            ON c~stlnr = d~stlnr
            AND c~stlkn = d~stlkn
            AND c~stlty = d~stlty
            WHERE a~werks IN s_werks
            AND ( ( d~andat IN s_datum
            OR d~aedat IN s_datum
            OR a~andat IN s_datum
            OR a~aedat IN s_datum
            OR b~andat IN s_datum
            OR b~aedat IN s_datum
            OR c~andat IN s_datum
            OR c~aedat IN s_datum
            ) AND d~datuv >= lv_effdt )
            AND a~stlan = '1'
            AND matnr IN s_matnr.
Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

Olá Siva,

O inner join é baseado nos campos chave, no MAST Matnr, Stlnnr é uma combinação de campos chave, mas para as tabelas STPO, STKO, STAS os campos chave são diferentes. Para um material, haverá mais registros se este inner join for utilizado.

Primeiro obtenha os dados da tabela MAST, com base nisso use o FM CSAP_MAT_BOM_READ para obter

todos os detalhes do BOM.

Use isso no relatório para obter os detalhes do BOM.

Cumprimentos,

Madhavi

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

O desempenho da consulta SELECT depende principalmente da cláusula WHERE.

E DISTINCT no SELECT não é melhor do que obter os dados em uma tabela interna e então ordenar a tabela interna e remover duplicatas adjacentes.

Espero que tenhas entendido o meu ponto.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

        ONDE a~werks EM s_werks
        E ( ( d~andat EM s_datum
            OU d~aedat EM s_datum
            OU a~andat EM s_datum
            OU a~aedat EM s_datum
            OU b~andat EM s_datum
            OU b~aedat EM s_datum
            OU c~andat EM s_datum
            OU c~aedat EM s_datum
            ) E d~datuv >= lv_effdt )
        E a~stlan = '1'
        E matnr EM s_matnr.
    

Esta parte determina seu desempenho, não o DISTINCT e nem os joins.

O que está em s_werks, s-datum, s_matnr geralmente? Eu suponho que existam condições melhores e piores.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

O desempenho da consulta select depende principalmente da cláusula where.

E usar distinct no select não é melhor do que obter os dados em uma tabela interna, ordenar a tabela interna e eliminar duplicatas adjacentes.

Espero que tenhas entendido o meu ponto.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?