Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Com having terei uma performance melhor de que com uma subconsulta?

Com having seria a melhor maneira de se fazer a consulta. Sei que por questões didáticas pediu-se para substituir o having por uma sub consulta porem acredito que esse exercício, segue abaixo, ficaria melhor solicitando o inverso e estimulando a melhor forma pelo menos nesse cenário.

Com having terei uma performance melhor de que com uma sub consulta? Ou pelo menos o entendimento da consulta fica melhor para nós e para o prórprio SQL SERVER.

Qual seria a consulta, usando sub-consulta, que seria equivalente a:

SELECT CPF, COUNT() FROM [NOTAS FISCAIS] WHERE YEAR(DATA) = 2016 GROUP BY CPF HAVING COUNT() > 2000 VER OPINIÃO DO INSTRUTOR Opinião do instrutor

A consulta seria:

SELECT X.CPF, X.CONTADOR FROM (SELECT CPF, COUNT(*) AS CONTADOR FROM [NOTAS FISCAIS] WHERE YEAR(DATA) = 2016 GROUP BY CPF) X WHERE X.CONTADOR > 2000

1 resposta
solução!

Nesse exemplo em específico, a utilização da cláusula HAVING em detrimento de uma subquery faz-se um pouco mais performática. Isso porque a consulta está limitada a apenas uma tabela, e utilizando a consulta com subquery, a tabela é acessada duas vezes.

Porém quando for necessário realizar consultas cruzando informações em várias tabelas, e identificando-se a necessidade de utilizar uma cláusula HAVING, nesse caso e dependendo da utilização das subqueries, o resultado será muito mais performático com as subqueries, pois as tabelas das subqueries serão acessadas em paralelo ao invés de linearmente.