Você já se viu em uma situação em que precisava de uma grande quantidade de dados fictícios para testes, mas não queria gastar horas escrevendo scripts ou inserindo registros manualmente? Ou talvez você esteja curioso sobre como aproveitar os novos recursos do MySQL 8.0 para agilizar suas tarefas de banco de dados? Bem, você terá uma surpresa! Nesta postagem, exploraremos como usar Common Table Expressions (CTEs) para gerar e inserir sem esforço grandes quantidades de dados fictícios em seu banco de dados MySQL.
Imagine a necessidade de preencher uma tabela com um milhão de valores de hash para testes de carga ou benchmarking de desempenho. Parece um pesadelo, certo? Não mais! Com o advento dos CTEs no MySQL 8.0, você pode conseguir isso em questão de segundos. Vamos ver como isso funciona e como você pode usar esse recurso poderoso para simplificar suas necessidades de geração de dados.
Common Table Expressions (CTEs), um novo recurso adicionado no MySQL 8.0, pode ser usado para inserir facilmente uma grande quantidade de dados fictícios simples. Por exemplo, se você deseja inserir 1 milhão de dados fictícios em uma tabela chamada hashes que armazena valores de hash, você pode fazer isso com as seguintes etapas:
Primeiro, crie a tabela:
CREATE TABLE hashes ( id INT PRIMARY KEY AUTO_INCREMENT, hash CHAR(64) );
Defina a variável de sessão para permitir uma maior profundidade de recursão:
SET SESSION cte_max_recursion_depth = 1000000;
Em seguida, execute o CTE para inserir 1 milhão de linhas:
INSERT INTO hashes(hash) WITH RECURSIVE cte (n) AS ( SELECT 1 UNION ALL SELECT n 1 FROM cte WHERE nEste método aproveita uma expressão de tabela comum recursiva para gerar os dados fictícios.
Compreendendo os CTEs
Uma Common Table Expression (CTE) é um conjunto de resultados temporário nomeado que pode ser referenciado em uma única instrução várias vezes. CTEs são particularmente úteis para simplificar consultas complexas e melhorar a legibilidade.
Divisão de sintaxe
Configurando a profundidade da recursão
SET SESSION cte_max_recursion_depth = 1000000;A variável de sistema cte_max_recursion_profundidade define o limite superior para recursão. Por padrão, é 1000, então para recorrer mais, você precisa ajustá-lo. Aqui, definimos como 1 milhão.
A consulta CTE
INSERT INTO hashes(hash) WITH RECURSIVE cte (n) AS ( SELECT 1 UNION ALL SELECT n 1 FROM cte WHERE nVamos analisar esta consulta:
WITH RECURSIVE cte (n): Isso inicia a definição do CTE. cte é o nome do conjunto de resultados temporário e n é a coluna.
SELECT 1: Esta é a parte não recursiva do CTE, servindo como ponto de partida (valor inicial).
UNION ALL SELECT n 1 FROM cte WHERE n
SELECT SHA2(n, 256) FROM cte: Esta parte final da consulta seleciona o hash SHA-256 de cada valor n, gerando os dados fictícios para inserção.
O CTE gera recursivamente números de 1 a 1.000.000. Para cada número, ele calcula o hash SHA-256 e o insere na tabela de hashes. Essa abordagem é eficiente e aproveita os recursos recursivos do MySQL para lidar perfeitamente com grandes volumes de dados.
Para entender o impacto desse recurso, usei um espaço de trabalho Gitpod Enterprise, aproveitando o ambiente poderoso e efêmero para evitar o incômodo de configurações e instalações. Aqui está uma olhada na configuração:
Para 1 milhão de linhas, o tempo de execução da consulta é de aproximadamente 4,46 segundos:
mysql> INSERT INTO hashes(hash) -> WITH RECURSIVE cte (n) AS -> ( -> SELECT 1 -> UNION ALL -> SELECT n 1 FROM cte WHERE n ) -> SELECT SHA2(n, 256) FROM cte; Query OK, 1000000 rows affected (4.43 sec) Records: 1000000 Duplicates: 0 Warnings: 0
Numero de linhas | Tempo de execução |
---|---|
1.000 | 0,03 seg |
10.000 | 0,07 seg |
100.000 | 0,42 seg |
1.000.000 | 4,43 seg |
10.000.000 | 48,53 seg |
O uso de CTEs no MySQL 8.0 é uma virada de jogo para a geração rápida de grandes quantidades de dados fictícios. É especialmente útil para testes de carga e benchmarking de desempenho. Com apenas algumas linhas de código, você pode preencher suas tabelas sem esforço e depois voltar para outras partes importantes do seu projeto.
Não hesite em experimentar diferentes estratégias de geração de dados e profundidades de recursão para ver o que funciona melhor para você. Para obter mais dicas e insights sobre segurança e análise de log, siga-me no Twitter @Siddhant_K_code e fique atualizado com o conteúdo técnico mais recente e detalhado como este. Boa codificação!
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3