Pular para o conteúdo principal

Exercícios resolvidos em Linguagem Python - para iniciantes

Esta lista de exercícios resolvidos é um manual para ajudar todo aluno iniciante e não só, a adquirir e aprimorar as habilidades necessárias para se trabalhar com Python, de forma rápida e consistente. Estude e desfrute do conteúdo. 1º Exercício      Faça um programa que informe a versão do Python que você está utilizando Solução import sys print ( "Versão do Python" ) print (sys.version) print ( "Informação da versão instalada" ) print (sys.version_info) Atenção :     -  O módulo sys fornece funções e variáveis usadas para manipular diferentes partes do ambiente de tempo de execução do Python;     - Pra quem ainda não está familiarizado com a linguagem, um módulo  é um arquivo contendo definições e comandos em Python para serem usados em outros programas. 2º Exercício      Faça um programa em linguagem Python que converta metros para centímetros. Solução print ( ' \t ----Conversão de medida---- ' ) metros = int ( in...

SQL SERVER - técnicas de otimização de consultas SQL para melhorar o desempenho.

SQL (Structured Query Language) é uma linguagem de programação usada para gerenciar bancos de dados relacionais. Com o SQL, você pode criar, ler, atualizar e excluir dados — o famoso conjunto de operações CRUD (Create, Read, Update, Delete).

Neste artigo, veremos algumas das técnicas mais eficazes para otimizar nossas consultas SQL.

1. Use a indexação adequada

Um índice é como um índice de um livro: ele serve pra encontrar informações rapidamente sem ter que "ler" todas as páginas (ou todas as linhas de uma tabela, no caso do banco de dados).

Tipos de índices no SQL Server

 

  • Índice Clustered (agrupado)

A tabela só pode ter um. Ele define a ordem física dos dados na tabela.

Exemplo típico: índice na chave primária.

CREATE CLUSTERED INDEX idx_produtos_id ON produtos(id);

  • Índice Non-Clustered (não agrupado)

A tabela pode ter vários.  É uma estrutura separada que aponta para os dados reais. Muito útil para buscas em colunas que não são a chave primária.

CREATE NONCLUSTERED INDEX idx_produtos_nome ON produtos(nome);

  • Índice Único (Unique Index)

Garante que não existam valores duplicados na coluna ou colunas.  Pode ser Clustered ou Non-Clustered.

CREATE UNIQUE INDEX idx_email_unico ON usuarios(email);

  • Índice Composto

Usa mais de uma coluna. Ideal quando você faz buscas usando múltiplas colunas ao mesmo tempo.

CREATE NONCLUSTERED INDEX idx_nome_sobrenome ON usuarios(nome, sobrenome);

  • Índices filtrados

Só indexam parte dos dados (com base em uma condição).  Muito útil para melhorar performance em casos específicos.

CREATE NONCLUSTERED INDEX idx_ativos ON usuarios(ativo) WHERE ativo = 1;

Evite usar índices desnecessários. Embora os índices sejam muito úteis para acelerar as consultas em SELECT, eles podem tornar as operações em INSERT, UPDATE e DELETE um pouco mais lentas. Isso ocorre porque o índice precisa ser atualizado sempre que você modificar os dados. Portanto, o excesso de índices pode tornar as coisas mais lentas, aumentando a sobrecarga das modificações de dados. 

Escolha o tipo de índice correto. Diferentes bancos de dados oferecem vários tipos de índices. Devemos escolher a que melhor se adapta aos nossos dados e padrões de consulta. Por exemplo, um índice de árvore B é uma boa opção se você costuma pesquisar intervalos de valores.

2. Evitar SELECT * FROM

Às vezes, ficamos tentados a usar o SELECT * FROM para pegar todas as colunas, mesmo aquelas que não são relevantes para nossa análise. Embora isso possa parecer conveniente, leva a consultas muito ineficientes que podem reduzir o desempenho. 

O banco de dados precisa ler e transferir mais dados do que o necessário, o que exige maior uso de memória, pois o servidor precisa processar e armazenar mais informações do que o necessário.

Como prática recomendada geral, devemos selecionar apenas as colunas específicas de que precisamos. Minimizar os dados desnecessários não só manterá nosso código limpo e fácil de entender, mas também ajudará a otimizar o desempenho.

Então, em vez de escrever:

SELECT  * FROM PRODUTOS ;



Devemos escrever:

SELECT 

      ID, 

     NOME, 

     CATEGORIA,

     UNIDADE

FROM PRODUTOS ;

3. Evite a recuperação de dados redundantes ou desnecessários

Acabamos de discutir que selecionar apenas colunas relevantes é considerado uma prática recomendada para otimizar as consultas SQL. No entanto, também é importante limitar o número de linhas que estamos recuperando, e não apenas de colunas. As consultas geralmente ficam mais lentas quando o número de linhas aumenta. 

Você pode usar a função TOP para reduzir o número de linhas retornadas. Esse recurso evita que recuperemos involuntariamente milhares de linhas de dados quando precisamos trabalhar com apenas algumas. 

A função TOP é especialmente útil para consultas de validação ou para inspecionar a saída de uma transformação na qual estamos trabalhando. É ideal para fazer experimentos e entender como nosso código se comporta. No entanto, ele pode não ser adequado para modelos de dados automatizados, nos quais precisamos retornar todo o conjunto de dados. 

Aqui temos um exemplo de como o TOP funciona:

SELECT 

      TOP 2 

       ID,

       NOME,

       CATEGORIA,

       UNIDADE

FROM PRODUTOS

ORDER BY NOME ASC

EXERCÍCIO SQL SERVER


4. Otimizar as cláusulas WHERE

A cláusula WHERE é essencial nas consultas SQL porque nos permite filtrar dados com base em condições específicas, garantindo que apenas os registros relevantes sejam retornados. Ele melhora a eficiência da consulta ao reduzir a quantidade de dados processados, o que é muito importante para trabalhar com um grande conjunto de dados. 

Portanto, uma cláusula WHERE correta pode ser um aliado poderoso quando estamos otimizando o desempenho de uma consulta SQL. Vejamos algumas maneiras pelas quais podemos aproveitar essa cláusula:

Adicione condições de filtragem adequadas com antecedência. Às vezes, ter uma cláusula WHERE é bom, mas não é suficiente. Precisamos ter cuidado com o local onde colocamos a cláusula. Filtrar o maior número possível de linhas no início da cláusula WHERE pode nos ajudar a otimizar a consulta.

Evite usar funções em colunas na cláusula WHERE. Quando aplicamos uma função a uma coluna, o banco de dados precisa aplicar essa função a todas as linhas da tabela antes de poder filtrar os resultados. Isso impede que o banco de dados use os índices de forma eficaz.

Por exemplo, em vez de: 

SELECT 

      ID,

      NOME, 

      CATEGORIA,

      UNIDADE,

      DATA_CADASTRO 

FROM PRODUTOS WHERE YEAR(DATA_CADASTRO)=2025

Devemos usar: 

SELECT 

      ID,

      NOME, 

      CATEGORIA,

      UNIDADE,

      DATA_CADASTRO 

FROM PRODUTOS 

WHERE DATA_CADASTRO >= '2025-01-01' AND DATA_CADASTRO < '2025-04-01'



Use operadores apropriados. Devemos escolher as operadoras mais eficientes que atendam às nossas necessidades. Por exemplo, = é geralmente mais rápido do que LIKE, e usar intervalos de datas específicos é mais rápido do que usar funções como MONTH(DATA_CADASTRO).

Então, por exemplo, em vez de realizar essa consulta, você pode fazer o seguinte:

SELECT * FROM PRODUTOS

WHERE MONTH(DATA_CADASTRO) = 12 AND YEAR(DATA_CADASTRO) = 2024;

Podemos fazer o seguinte: 

SELECT  FROM PRODUTOS

WHERE DATA_CADASTRO >= '2024-12-01' AND DATA_CADASTRO < '2024-12-31';

5. Evite ordenação e agrupamento desnecessários

Como profissionais de dados, gostamos de ter nossos dados ordenados e agrupados para que possamos obter insights mais facilmente. Normalmente, usamos ORDER BY e GROUP BY em nossas consultas SQL.

No entanto, ambas as cláusulas podem ser computacionalmente caras, especialmente ao lidar com grandes conjuntos de dados. Ao classificar ou agregar dados, o mecanismo de banco de dados geralmente precisa executar uma varredura completa dos dados e, em seguida, organizá-los, identificar os grupos e/ou aplicar funções agregadas, normalmente usando algoritmos que consomem muitos recursos.

Para otimizar as consultas, você pode seguir algumas destas dicas:

Minimizar a classificação. Devemos usar o ORDER BY somente quando necessário. Se a classificação não for essencial, a omissão dessa cláusula pode nos ajudar a reduzir drasticamente o tempo de processamento.

Use índices. Quando possível, devemos nos certificar de que as colunas envolvidas em ORDER BY e GROUP BY sejam indexadas .

Envie a classificação para a camada de aplicativos. Se for possível, devemos empurrar a operação de classificação para a camada do aplicativo em vez de para o banco de dados.

Dados pré-agregados. Para consultas complexas envolvendo GROUP BY, poderíamos pré-agregar os dados em um estágio anterior ou em uma visualização materializada, para que o banco de dados  não precise calcular os  mesmos agregados repetidamente. banco de dados não precise computar os mesmos agregados repetidamente.

6. Use UNION ALL em vez de UNION

Quando quisermos combinar resultados de várias consultas em uma única lista, podemos usar as cláusulas UNION e UNION ALL. Ambos combinam os resultados de dois ou mais comandos SELECT quando eles têm os mesmos nomes de coluna. No entanto, eles não são iguais, e sua diferença os torna adequados para diferentes casos de uso.

A cláusula  UNION remove as linhas duplicadas, o que exige mais tempo de processamento .

Enquanto que o UNION ALL combina os resultados, mas mantém todas as linhas, inclusive as duplicadas. Portanto, se não precisarmos remover duplicatas, devemos usar UNION ALL para melhorar o desempenho.

-- Consulta menos performática

SELECT 

    NOME,

    CATEGORIA,

    UNIDADE,

    'LOJA 1' AS LOJA  

FROM PRODUTOS

UNION

SELECT 

    NOME,

    CATEGORIA,

    UNIDADE,

    'LOJA 2' AS LOJA

 FROM PRODUTOS_LOJA2

-- Consulta mais performática

SELECT 

    NOME,

    CATEGORIA,

    UNIDADE,

    'LOJA 1' AS LOJA  

FROM PRODUTOS

UNION ALL

SELECT 

    NOME,

    CATEGORIA,

    UNIDADE,

    'LOJA 2' AS LOJA

 FROM PRODUTOS_LOJA2




Comentários

Postagens mais visitadas deste blog

Exercícios resolvidos em Linguagem Python - para iniciantes

Esta lista de exercícios resolvidos é um manual para ajudar todo aluno iniciante e não só, a adquirir e aprimorar as habilidades necessárias para se trabalhar com Python, de forma rápida e consistente. Estude e desfrute do conteúdo. 1º Exercício      Faça um programa que informe a versão do Python que você está utilizando Solução import sys print ( "Versão do Python" ) print (sys.version) print ( "Informação da versão instalada" ) print (sys.version_info) Atenção :     -  O módulo sys fornece funções e variáveis usadas para manipular diferentes partes do ambiente de tempo de execução do Python;     - Pra quem ainda não está familiarizado com a linguagem, um módulo  é um arquivo contendo definições e comandos em Python para serem usados em outros programas. 2º Exercício      Faça um programa em linguagem Python que converta metros para centímetros. Solução print ( ' \t ----Conversão de medida---- ' ) metros = int ( in...

Como abrir uma página da web utilizando Python?

Simples, você pode abrir páginas da Web de forma rápida, segura e fácil. Veja só, durante os estudos das bibliotecas padrão do Python descobri que para abrir um navegador web a partir de um script, devo importar o módulo webbrowser. Em seguida, usar webbrowser.open () que vai receber o link que quero abrir como argumento e executar o serviço, ou seja, basta inserir um endereço do youtube nele, na verdade pode ser qualquer link que você desejar. Exemplo webbrowser.open( "https://www.huicode.com.br/p/exercicios-resolvidos-de-linguagem-c.html" ) Para funcionar temos que importar o módulo webbrowser, que vai ser a maneira de dizer ao python que queremos usar webbrowser e todas as suas funcionalidades no programa. import webbrowser webbrowser.open( "https://www.huicode.com.br/p/exercicios-resolvidos-de-linguagem-c.html" ) Funcionooou, uhuhu. Nem parece, mas o módulo webbrowser é um módulo muito empregado em projetos de sites de filmes. Tem muitas utilidades, acredite.

CÁLCULO DA ÁREA DE UM TRIÂNGULO - LINGUAGEM C

Escreva um programa para calcular a área de um triângulo, sendo dados a sua base e a  sua altura. A = (B*H)/2 Solução #include <stdio.h> int main() {   // Variáveis  float area,base,altura;  // Entrada de Dados  printf( "\n Informe a base do triângulo: " );  scanf( "%f" ,&base);  printf( "\n Informe a altura do triângulo: " );  scanf( "%f" ,&altura);   // Processamento dos dados  area=(base*altura)/2;  // Exibição do resultado  printf( "\n Area do triângulo=%.1f\n" ,area);   return 0; }