"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Obtendo com eficiência o valor máximo e os métodos de dados correspondentes de grandes tabelas de banco de dados SQL

Obtendo com eficiência o valor máximo e os métodos de dados correspondentes de grandes tabelas de banco de dados SQL

Postado em 2025-04-21
Navegar:724

How to Efficiently Retrieve the Maximum Value and Corresponding Data from a Large SQL Database Table?

encontrando com eficiência valores máximos e dados associados em grandes tabelas SQL

frequentemente, as consultas do banco de dados exigem encontrar o valor máximo em uma coluna e recuperar os dados correspondentes de outras colunas na mesma linha. Isso é especialmente desafiador com conjuntos de dados muito grandes. Considere uma tabela que precisa encontrar o número mais alto da versão para cada ID exclusivo, juntamente com sua tag associada:

Tabela de amostra:

ID  |  tag  |  version
----- ----- -----
1 |  A  |  10
2 |  A  |  20
3 |  B  |  99
4 |  C  |  30
5 |  F  |  40

resultado desejado:

ID  |  tag  |  version
----- ----- -----
2  |  A  |  20
3  |  B  |  99
4  |  C  |  30
5  |  F  |  40

Para tabelas com cerca de 28 milhões de linhas, métodos padrão como aninhados selecione instruções ou simples grupo por com max pode ser incrivelmente lento. Uma solução muito mais eficiente usa o row_number () função:

SELECT s.id, s.tag, s.version
FROM (
  SELECT t.*,
         ROW_NUMBER() OVER(PARTITION BY t.id ORDER BY t.version DESC) AS rnk
  FROM YourTable t
) s
WHERE s.rnk = 1;

Esta consulta funciona em duas etapas:

  1. Query Inner: atribui uma classificação exclusiva ( rnk ) a cada linha dentro de cada id partição (grupo de linhas com o mesmo id). A classificação é baseada na coluna na ordem descendente, o que significa que a versão mais alta recebe a classificação 1.

  2. Consulta externa: Filtra os resultados da consulta interna, selecionando apenas as linhas onde rnk = 1 . Isso efetivamente nos dá a linha com a versão máxima para cada id .

Esta abordagem evita consultas aninhadas e grupo por operações, tornando -a significativamente mais rápida para conjuntos de dados grandes. O uso de row_number () fornece uma maneira limpa e eficiente de obter o resultado desejado.

Tutorial mais recente Mais>

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