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 / 17493
Accepted
Abhishek Sagar
Abhishek Sagar
Asked: 2012-05-06 03:31:08 +0800 CST2012-05-06 03:31:08 +0800 CST 2012-05-06 03:31:08 +0800 CST

Como uma junção é realizada por um mecanismo de banco de dados?

  • 772

Como uma junção entre duas tabelas é realmente executada por um mecanismo de banco de dados?

Tenho certeza de que listar uma tupla em relação a todas as tuplas da outra tabela não pode ser a maneira de realizar a junção; é apenas uma maneira de entender como será a saída. Caso contrário, para duas tabelas contendo 1.000 tuplas cada, uma junção prepararia um conjunto de dados intermediário de 1.000*1.000 tuplas! Isso é difícil de acreditar.

join database-internals
  • 3 3 respostas
  • 596 Views

3 respostas

  • Voted
  1. Best Answer
    James Anderson
    2012-05-06T04:19:47+08:002012-05-06T04:19:47+08:00

    Existem várias maneiras, dependendo do que o DBMS pensa que você deseja versus o que é ajudado no banco de dados.

    1. Leia uma linha da primeira tabela e, em seguida, leia todas as linhas correspondentes da segunda tabela. Este é o método preferencial quando você está solicitando poucas linhas e há índices para suportar a leitura da segunda tabela.
    2. Verificação de índice correspondente, selecione o conjunto necessário de um índice da primeira tabela e, em seguida, combine esse conjunto com um índice da segunda tabela (geralmente após uma classificação) e, em seguida, busque as linhas necessárias. Normalmente, esse método é usado quando um número substancial de linhas é solicitado em uma sequência específica.
    3. Força bruta, obtenha todas as linhas da primeira tabela e classifique-as na sequência correta, depois obtenha todas as linhas da segunda tabela e classifique-as na sequência correta e, em seguida, mescle os resultados. Normalmente, esse método é usado quando não há índices utilizáveis ​​para suportar a junção. É um porco de desempenho e usado apenas onde nada mais serve.

    Existem muitas variações desses três métodos que variam de RDBMS para RDBMS e os bancos de dados comerciais mais caros têm dezenas de otimizações sutis que serão usadas dependendo das circunstâncias.

    • 1
  2. nadirs
    2012-05-06T03:53:51+08:002012-05-06T03:53:51+08:00

    Meu entendimento: vamos considerar duas tabelas, A e B (o relacionamento é um para muitos). JOIN cria uma tabela temporária com os campos solicitados de A e B. Para cada linha de B, junto com os campos solicitados da tabela B, acrescenta os campos necessários da linha da tabela A cuja chave primária é igual à chave estrangeira de B.

    Pena que isso são apenas meus pensamentos, então eles podem não ser o que você está procurando.

    • 0
  3. Thilo
    2012-05-06T04:20:18+08:002012-05-06T04:20:18+08:00

    Bem, se você não tiver um filtro adicional instalado, o conjunto de dados de 1.000 * 1.000 linhas é o que você pediu.

    No entanto, se você tiver condições adicionais, a estratégia usada dependerá dessas condições. Não haverá uma resposta geral para sua pergunta.

    O PostgreSQL, por exemplo, usa três estratégias diferentes para JOINs, dependendo da situação. Você pode ler sobre eles aqui .

    Você pode obter as informações de qual estratégia é escolhida emitindo sua consulta precedida por um EXPLAIN, como

    EXPLAIN SELECT * FROM t1 LEFT JOIN t2 ON t1.a > t2.b
    

    Observar essa saída geralmente fornece dicas valiosas sobre como melhorar a consulta reformulando sua condição de forma que uma estratégia de junção mais poderosa seja escolhida.

    • 0

relate perguntas

  • SQL Server: junte duas tabelas com datas "válidas até"

  • SQL Return Count of Answers with 0's for Choices from other table

  • Posso automatizar a instrução "on" das consultas MySQL?

  • Qual é a diferença entre um INNER JOIN e um OUTER JOIN?

  • Como é a saída de uma instrução JOIN?

Sidebar

Stats

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

    Como ver a lista de bancos de dados no Oracle?

    • 8 respostas
  • Marko Smith

    Quão grande deve ser o mysql innodb_buffer_pool_size?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    restaurar a tabela do arquivo .frm e .ibd?

    • 10 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

    Como selecionar a primeira linha de cada grupo?

    • 6 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
    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
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +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
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +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