Prática #4: grande junção primária-subtable : Uma solução leve para acelerar as consultas despejando dados em arquivos

Esta seção se concentra na aceleração das junções primárias baseadas em chaves. A associação entre a tabela primária (ordens) e seu subtable (detalhes) é baseada na chave primária. Ainda assim, o SQL usa a participação para alcançar essa associação. Quando as duas tabelas são grandes, geralmente a velocidade de computação se torna muito lenta. Se a tabela primária e a subtable puderem ser pré-armazenados para a chave primária, você poderá usar o algoritmo de mesclagem para alcançar a junção. Sem a assistência de buffers de armazenamento externo, o algoritmo de mesclagem apenas atravessa as duas tabelas em ordem, reduzindo significativamente a quantidade de computação e a quantidade de E/S. O ESPROC SPL suporta o algoritmo de mesclagem baseado em pedidos, que pode aumentar bastante o desempenho da junção primária subtable. Primeiro, prepare os dados – exporte os dados históricos do banco de dados para os arquivos CTX. Defina Q4.etl em ETL: Adicione Q4 ao nome de cada uma das duas tabelas. Divida a tabela Detalhes do Q4 em vários segmentos no primeiro campo: como existem duplicatas nos valores da tabela Order_ID da tabela Detalhesq4, você precisa declarar que o primeiro campo é a chave de segmentação. Caso os registros com o mesmo valor Order_id sejam divididos e colocados em dois segmentos diferentes, a opção @p será adicionada automaticamente para criar () função no arquivo SPLX. Nota: as duas tabelas são unidas no Order_id, para que sejam armazenadas em ordem de acordo com este campo. Não há necessidade de verificar “Executar classificação do banco de dados”. Código SPL Exemplo 18: A5 e A8 Use #Order_Id para declarar que o arquivo CTX é solicitado pelo order_id. Para obter detalhes, a tabela, o A8 usa automaticamente a opção @p na função create () para especificar o primeiro campo como a chave de segmentação para impedir que os registros do mesmo Order_ID valor sejam separados e colocados em dois segmentos diferentes. Exemplo 4.1 Em um intervalo de tempo especificado, registros de grupo por cliente e valor do pedido de computação em cada grupo. Selecione O.Customer_Id, Sum (D.Quantity * D.Price) FROM ORDERS O Junte-se a detalhes d em O.Order_id = D.Order_id Where O.Order_Date> = ‘2024-01-15’ e O.Order_Date <= ‘2024-03-15’ Grupo O.Customer_Id; Digite o modo de saída do modo de tela cheia, leva 25 segundos para terminar de executar o código SQL. Exemplo de código SPL 19: leva apenas um segundo para terminar de executar o script SPL. No A3, o último parâmetro da função cursor () é A2, o que significa processamento multithread. Para executar o processamento multithread, a tabela de detalhes também será segmentada alinhando -se com a tabela de pedidos, garantindo que as duas tabelas possam ser mescladas corretamente. A4 executa a mesclagem baseada em pedidos em pedidos e detalhes. A5 executa agrupamento e agregação no conjunto de resultados de mesclagem. Vejamos a função A4: junçãox () mescla pedidos e detalhes em ordem e retorna um cursor de dois campos. Como pode ser visto na figura acima, cada valor de campo no cursor é um objeto de registro. Você também precisa observar que as duas tabelas têm um relacionamento um para muitos, o que significa que os registros de pedidos serão copiados repetidamente. Exemplo 4.2 Registros de pedidos do grupo onde o ID do cliente 3 ou 9 por ID do produto e pelo valor do pedido de computação em cada grupo. Selecione D.Product_id, Sum (D.Quantity * D.Price) de Ordens o Participe Detalhes D em O.Order_id = D.Order_id onde O.Customer_Id = 3 ou O.Customer_Id = 9 Grupo por D.product_id; Digite o modo de saída do modo de tela cheia, leva 21 segundos para terminar de executar o código acima. Código SPL Exemplo 20: leva 0,6 segundo para terminar de executar o script SPL. Exemplo 4.3 Calcule a quantidade média de todos os pedidos. Requisito: Obtenha registros de detalhes do pedido cujos IDs de produto não são 2 e 8, agrupe -os por data e encontre o valor médio do pedido em cada grupo. Nota: Conte ordens exclusivas em cada grupo. Selecione O.Order_Date, Sum (D.quantity * D.Price)/contagem (distinto O.Order_Id) de Ordens O Junte -se Detalhes d O.Order_id = D.Order_id WHERE D.Product_id! = 2 e D.product_id! = 8 Grupo por O.Order_Date; Digite o modo de saída do modo de tela cheia, leva 40 segundos para terminar de executar o código acima. Primeira junção primária-subtable e contagem distinta, mas no SQL ambas as operações têm baixo desempenho. Código SPL Exemplo 21: a contagem distinta baseada em pedidos da SPL tem um desempenho muito maior. Especificamente falando, o algoritmo exige que os registros sejam ordenados pelo Order_ID e possam ser implementados após a fusão dos registros. Leva 1,5 segundos para terminar de executar o script SPL. Resumo do desempenho (Unidade: Segundo): Exercícios: Obtenha registros de detalhes do pedido onde os IDs do produto são 3 ou 6, agrupe -os por ID do cliente e calcule o valor médio do pedido em cada grupo. Pensamento crítico: você já encontrou grandes junções primárias em seus bancos de dados familiares? Você pode usar o algoritmo de mesclagem baseado em pedidos para acelerar as junções? SPL é de código aberto. Você pode obter o código -fonte do GitHub. Experimente grátis ~~

Fonte

Publicar comentário

Você pode ter perdido