Sobes.tech
Middle+

Quando a varredura completa do conjunto de dados é mais eficiente do que o acesso por índice?

sobes.tech IA

Resposta da IA

Quando a percentagem de registos que precisam de ser processados é suficientemente alta (por exemplo, mais de 10-20%), de modo que os custos de pesquisa no índice e leitura de blocos de dados individuais ultrapassem as vantagens.

Outros casos:

  • Falta de um índice adequado: Se não houver um índice que cubra os campos de filtragem ou que forneça acesso aos dados mais rapidamente do que uma varredura completa.
  • Distribuição desigual de dados (skew): Se o campo indexado tiver baixa cardinalidade e a maior parte dos dados estiver concentrada em poucos valores, a varredura pode ser mais rápida do que percorrer muitas folhas do índice com valores iguais.
  • Conjunto de dados pequeno: Para tabelas pequenas, os custos de manutenção e uso do índice podem ser superiores ao benefício de o usar.
  • Leitura sequencial: Uma varredura completa geralmente envolve uma leitura sequencial do disco, o que pode ser mais rápido do que uma leitura aleatória ao aceder através do índice, especialmente em HDD.
  • Grande volume de dados numa linha: Se cada linha contiver uma grande quantidade de dados, ler todo o conjunto de dados de uma só vez pode ser mais eficiente do que múltiplos acessos ao disco para obter linhas individuais através do índice.

Exemplo em que uma varredura completa pode ser mais eficiente:

// Seleção simples * numa tabela com poucas linhas.
SELECT *
FROM small_table;

// Consulta com filtro que afeta a maioria das linhas
SELECT *
FROM large_table
WHERE status = 'processed'; // Se a maioria das linhas tiver o estado 'processed'