AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 345174
Accepted
J. Mini
J. Mini
Asked: 2025-02-09 00:23:12 +0800 CST2025-02-09 00:23:12 +0800 CST 2025-02-09 00:23:12 +0800 CST

A união de tabelas particionadas de forma equivalente é mais rápida do que a união de duas tabelas com a mesma chave de índice clusterizado principal?

  • 772

A documentação sobre os benefícios do particionamento lista o seguinte como o primeiro benefício de desempenho do particionamento de tabelas

o otimizador de consultas pode processar consultas de junção equivalente entre duas ou mais tabelas particionadas mais rapidamente quando as colunas de particionamento são as mesmas que as colunas nas quais as tabelas são unidas.

A mesma página fala um pouco mais sobre esse tópico mais adiante , mas não chega a nada além de dizer que unir tabelas particionadas que não são particionadas exatamente da mesma forma não obtém as mesmas otimizações que unir tabelas particionadas equivalentemente. Isso é, claro, irrelevante para o que a seção anterior alegou; qualquer comparação de desempenho entre duas formas de particionar tabelas não tem nada a ver com os benefícios do particionamento quando comparado a não particionar.

Isso me faz perguntar: unir tabelas particionadas equivalentemente é mais rápido do que unir duas tabelas com a mesma chave de índice clusterizado líder? Eu ficaria feliz com uma resposta experimental ou uma que usasse a teoria relevante para chegar a uma conclusão.

Eu li sobre os internos e li muitos white papers e blogs, mas acho que não vi isso abordado em lugar nenhum. Meu entendimento dos internos me leva a concluir que a abordagem particionada deve ser mais lenta do que a abordagem não particionada. Afinal, tudo o que o particionamento realmente faz é colocar outra chave de índice na frente da sua lista de chaves. Meus próprios experimentos descobriram o mesmo.

sql-server
  • 1 1 respostas
  • 45 Views

1 respostas

  • Voted
  1. Best Answer
    Paul White
    2025-02-09T13:16:45+08:002025-02-09T13:16:45+08:00

    unir tabelas particionadas de forma equivalente é mais rápido do que unir duas tabelas com a mesma chave de índice clusterizado principal?

    Pode ser, mas como qualquer coisa relacionada a particionamento, depende muito das circunstâncias. Você pode ver melhor ou pior desempenho na prática.

    Em todo caso, é mais uma questão de habilidades de otimizador de consulta do que algo realmente fundamental. Como diz o último link da pergunta (ênfase adicionada):

    Junções colocadas juntas podem ser mais rápidas do que junções não colocadas juntas porque podem exigir menos memória e tempo de processamento.

    O formato do plano nesse link é:

    Forma de plano de junção colocada

    Há menos trocas neste plano, comparado a um hash regular ou merge join. A troca única mostrada usa particionamento Demand para distribuir um novo id de partição para um thread paralelo, conforme necessário.

    A junção é realizada em uma partição por vez, com um thread por partição. Se houver 64 partições para processar no DOP 8, cada thread pode acabar processando 8 partições, uma após a outra. Qualquer outra distribuição de trabalho em tempo de execução é possível, dependendo da quantidade de trabalho necessária por partição e de quanto tempo o thread obtém em seu planejador.

    Além da memória e dos threads liberados pela falta de trocas de reparticionamento em ambas as entradas de junção, a junção hash requer no máximo memória para 8 partições a qualquer momento: Cada thread pode reutilizar a memória de construção hash que usou para a partição anterior. Portanto, o requisito geral de memória pode ser muito menor do que processar a operação inteira em oito threads de uma só vez.

    Claro, não há nada de mágico sobre a ideia fundamental. Pode-se escrever uma junção colocada manualmente com tabelas não particionadas, assumindo que há um conjunto adequado de intervalos conhecidos antes do tempo; no entanto, é preciso ter cuidado com os detalhes ao implementar essa ideia.

    Uma das preocupações é que ele funciona melhor quando os dados são distribuídos uniformemente entre as partições e cada thread recebe o mesmo tempo em um agendador. As desvantagens do modelo thread-per-partition usado no SQL Server 2005 e anteriores são uma das razões pelas quais a abordagem de prefixo de índice foi desenvolvida e melhorias foram feitas na distribuição paralela de threads, conforme observado em seu link.

    Você pode encontrar análises de desempenho e mais detalhes no meu artigo, Melhorando o desempenho de junções de tabelas particionadas .

    Note que tudo isso se aplica principalmente a planos de execução de modo de linha . Planos de modo de lote distribuem lotes entre threads dinamicamente e não usam trocas. Você ainda pode encontrar algum benefício em reduzir o requisito máximo de memória.

    • 4

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve