A contagem de SQL incorporada está demorando muito para prosseguir
-
21-12-2019 - |
Pergunta
Aqui está meu comando SQL:
SELECT
ts.CHECK_NUMBER,
ts.CUSTOMER_NAME,
ts.COMPANY_NAME,
( SELECT COUNT(*)
FROM TRANSACTION_ORDER too
WHERE too.CHECK_NUMBER = ts.CHECK_NUMBER
) as NB_OF_ORDERS
FROM
TRANSACTION_SUMMARY ts
ORDER BY
ts.BUSINESS_DATE
Está demorando tanto para renderizar os dados, estamos falando de no mínimo 3.000 transações, para cada uma temos que contar os pedidos.
Existe alguma solução melhor?
Solução
Está demorando muito porque quando você tem essa subconsulta em seu select , ela é executada para cada linha retornada pela consulta externa, portanto, se sua consulta externa retornar 50.000 linhas, essa consulta de seleção interna será executada 50.000 vezes, o que é obviamente um assassino de desempenho,
Você deveria tentar algo assim....
SELECT
ts.CHECK_NUMBER
,ts.CUSTOMER_NAME
,ts.COMPANY_NAME
,ISNULL(O.Total, 0) AS NB_OF_ORDERS
FROM TRANSACTION_SUMMARY ts
LEFT JOIN --<-- use inner join is you only want records with some orders
( SELECT CHECK_NUMBER, COUNT(*) AS Total
FROM TRANSACTION_ORDER
GROUP BY CHECK_NUMBER
) as O
ON ts.CHECK_NUMBER = O.CHECK_NUMBER
ORDER BY ts.BUSINESS_DATE
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow