Este artigo é compartilhado pela Huawei Cloud Community " [Otimização SQL] Por que às vezes é impossível usar hashjoin com melhor desempenho de execução ", autor: leapdb.
1. Hash join geralmente é melhor do que nestloop join
1. Desligue o modo Nestloop no nível da sessão, defina enable_nestloop como desligado;
CRIAR BANCO DE DADOS test_td COM DBCOMPATIBILITY='td'; criar tabela dim_day(day_code char(8)); crie a tabela dwr_rpo como selecione data_atual - 1 como day_code; --返回了date类型 test_td=# \d+ dwr_rpo Tabela "public.dwr_rpo" Coluna | Tipo | Modificadores | Armazenamento | Meta de estatísticas | Descrição ----------+------+-----------+---------+--------- -+---------------- código_dia | data | | simples | | Possui OIDs: não Distribuído por: ROUND ROBIN Nós de localização: ALL DATANODES Opções: orientação=linha, compressão=não explicar selecione * de dwr_rpo a left join dim_day c on c.day_code = a.day_code; identificação | operação | Linhas eletrônicas | E-distinto | Memória eletrônica | Largura eletrônica | Custos eletrônicos ---+---------------------------------------------------------- ---+---------+------------+----------+---------+-- ------------ 1 | -> Streaming (tipo: GATHER) | 1310148 | | | 1694 | 279235196,70 2 | -> Junção à esquerda do loop aninhado (3, 4) | 1310148 | | 1 MB | 1694 | 279229682,933 | -> Seq Scan em dwr_rpo a | 1310148 | | 1 MB | 1676 | 46589.164 | -> Materializar | 109575 | | 16 MB | 22 | 3747,765 | -> Streaming(tipo: BROADCAST) | 109575 | | 2 MB | 22 | 3565,14 6 | -> Varredura Seq em dim_day c | 36525 | | 1 MB | 22 | 272.75 Informações de predicado (identificadas pelo ID do plano) ----------------------------------------- ------------------------------------ 2 --Nested Loop Left Join (3, 4) Filtro de junção : ((c.day_code)::timestamp sem fuso horário = a.day_code)
Diferentes tipos de dados têm diferentes funções de cálculo de hash e comparações de hash não podem ser realizadas em tipos de dados mutuamente incompatíveis.
Complexidade Nestloop: 131w * 10w = 131 bilhões
Complexidade de hashjoin: 131w
Os tipos parecem semelhantes, mas devido às diferenças de precisão, formato, fuso horário, etc. em ambas as extremidades, eles não podem ser considerados diretamente iguais.
selecione oprname,oprkind,oprcanhash, (selecione typname de pg_type onde oid=oprleft) oprleft, (selecione typname de pg_type onde oid=oprright) oprright de pg_operator onde oprname='=' e oprcanhash='f'; oprnome | oprkind | oprcanhash | opresquerda | ok ---------+---------+------------+---------------+ --------------- = | b | f | xid | int8 = | b | f | xid32 | int4 = | b | f | bom dia | tempo = | b | f | caixa | caixa = | b | f | caminho | caminho = | b | f | intervalo | intervalo = | b | f | dinheiro | dinheiro = | b | f | círculo | círculo = | b | f | lseg | lseg = | b | f | linha | linha = | b | f | pouco | pouco = | b | f | varbit | varbit = | b | f | data | carimbo de data / hora = | b | f | data | carimbo de data / hora = | b | f | carimbo de data/hora | data = | b | f | carimbo de data / hora | data = | b | f | carimbo de data/hora | carimbo de data / hora = | b | f | carimbo de data / hora | carimbo de data / hora = | b | f | vetor ts | vetor = | b | f | consulta | tsquery = | b | f | registro | registro = | b | f | olá | olá = | b | f | hll_hashval | hll_hashval = | b | f | rugindo bitmap | rugido bitmap (24 linhas)
current_date é o tipo de data no modo de compatibilidade TD;
Clique para seguir e conhecer as novas tecnologias da Huawei Cloud o mais rápido possível~
O autor da estrutura de código aberto NanUI passou a vender aço e o projeto foi suspenso. A lista gratuita número um na App Store da Apple é o software pornográfico TypeScript. Ele acaba de se tornar popular, por que os grandes começam a abandoná-lo ? Lista TIOBE de outubro: Java tem o maior declínio, C # está se aproximando Java Rust 1.73.0 lançado Um homem foi encorajado por sua namorada AI a assassinar a Rainha da Inglaterra e foi condenado a nove anos de prisão Qt 6.6 lançado oficialmente Reuters: RISC-V a tecnologia se torna a chave para a guerra tecnológica sino-americana Novo campo de batalha RISC-V: não controlada por nenhuma empresa ou país, a Lenovo planeja lançar o Android PC