Por que a Classificação de Relação no Notion Dispara o Recálculo Completo do Banco de Dados
🔍 WiseChecker

Por que a Classificação de Relação no Notion Dispara o Recálculo Completo do Banco de Dados

Se você tem um banco de dados no Notion com uma coluna de relação e altera a ordem de classificação do campo de relação, pode notar que todo o banco de dados recalcula. Isso pode causar uma breve lentidão, especialmente em bancos grandes com centenas ou milhares de linhas. A causa raiz é como o Notion armazena e resolve dados de relação internamente. Este artigo explica por que uma classificação em uma coluna de relação força um recálculo completo e o que você pode fazer para minimizar o impacto no desempenho.

Principais Conclusões: Classificação de Relação e Desempenho do Banco de Dados

  • Classificar por relação dispara um recálculo completo do banco de dados: O Notion recalcula cada linha do banco de dados quando você classifica por uma coluna de relação porque os valores de relação são resolvidos dinamicamente no momento da consulta.
  • Colunas de rollup e fórmula amplificam a lentidão: Se seu banco de dados inclui rollups ou fórmulas que dependem da relação, cada linha recalcula esses também durante a classificação.
  • Use uma coluna de classificação dedicada para evitar recálculos frequentes: Crie uma coluna de fórmula ou rollup que extraia o valor da relação que você deseja classificar e, em seguida, classifique essa coluna.

ADVERTISEMENT

Por que Classificar uma Coluna de Relação Recalcula o Banco de Dados Inteiro

No Notion, uma coluna de relação não armazena o valor real que você vê na célula. Em vez disso, armazena uma referência ao ID da página relacionada. Quando você visualiza o banco de dados, o Notion resolve cada referência de relação buscando as propriedades da página vinculada. Essa resolução acontece dinamicamente toda vez que o banco de dados é carregado ou classificado.

Quando você aplica uma classificação a uma coluna de relação, o Notion precisa resolver a relação para cada linha do banco de dados para determinar a ordem de classificação. Isso ocorre porque o algoritmo de classificação precisa de um valor concreto (como um título de página ou data) da página relacionada para comparar linhas. Sem um valor pré-calculado, o Notion recalcula a célula de relação de cada linha. O processo é semelhante a uma junção de banco de dados em SQL: o sistema busca e compara dados de duas tabelas para cada linha.

Como Funciona a Resolução de Relação

Cada célula de relação contém uma lista de IDs de página. Quando o Notion renderiza o banco de dados, ele envia uma consulta para buscar os títulos (ou outras propriedades) dessas páginas vinculadas. Essa consulta é armazenada em cache brevemente para visualização normal. Mas uma operação de classificação invalida esse cache porque a ordem de classificação depende do valor resolvido. O Notion precisa consultar novamente as páginas vinculadas para cada linha para construir um conjunto de resultados classificado.

Por que Isso Afeta Mais Bancos de Dados Grandes

Se seu banco de dados tem 500 linhas e cada linha tem uma relação com uma página, o Notion faz até 500 consultas adicionais para resolver os títulos das páginas relacionadas. Para bancos de dados com rollups ou fórmulas que referenciam a relação, cada linha dispara cálculos adicionais. O tempo total escala linearmente com o número de linhas. Bancos de dados com mais de 1.000 linhas podem experimentar uma lentidão perceptível de vários segundos.

Passos para Reduzir o Impacto da Classificação de Relação

Você não pode evitar o recálculo completamente devido à forma como o Notion resolve relações. Mas você pode mudar seu fluxo de trabalho para evitar classificar a coluna de relação diretamente. O método a seguir usa uma coluna auxiliar para armazenar o valor resolvido permanentemente.

  1. Crie uma coluna de fórmula para extrair o valor da relação
    Adicione uma coluna de fórmula ao seu banco de dados. Use a função prop() para referenciar a coluna de relação. Por exemplo, se sua coluna de relação se chama “Projeto”, crie uma fórmula com prop("Projeto").first().name para obter o título da primeira página vinculada. Essa fórmula resolve o valor da relação e o armazena como texto na célula da fórmula.
  2. Classifique pela coluna de fórmula em vez da coluna de relação
    Aplique sua classificação à nova coluna de fórmula. Como o valor da fórmula é calculado uma vez quando a página é editada, o Notion não precisa consultar novamente a relação para classificar. A operação de classificação usa o valor da fórmula armazenado, que é muito mais rápido.
  3. Remova rollups e fórmulas desnecessárias que dependem da relação
    Se você tem colunas de rollup que agregam dados de relação (como “Status do Projeto” de um rollup), cada classificação na coluna de relação força esses rollups a recalcular. Considere mover valores de rollup para uma coluna de fórmula que resolva apenas a propriedade específica necessária para classificação.
  4. Limite o número de linhas exibidas na visualização
    Use filtros para mostrar apenas as linhas necessárias. Por exemplo, filtre por um intervalo de datas ou status. Um conjunto de dados menor reduz o número de resoluções de relação durante uma classificação. Clique no botão “Filtrar” no topo da visualização do banco de dados e adicione uma condição que limite as linhas.

ADVERTISEMENT

Se o Notion Ainda Tiver Problemas de Desempenho Após a Correção Principal

Classificação Ainda Parece Lenta Mesmo com uma Coluna de Fórmula

Se sua coluna de fórmula contém uma expressão complexa (como prop("Relação").map(current.prop("Nome")).join(", ")), a própria fórmula pode ser lenta para avaliar. Simplifique a fórmula para extrair apenas o primeiro valor ou uma única propriedade. Por exemplo, use prop("Relação").first().name em vez de mapear todas as páginas vinculadas.

Banco de Dados Tem Muitas Colunas de Relação

Cada coluna de relação em um banco de dados adiciona sobrecarga durante qualquer operação de classificação. Se você tem três ou mais colunas de relação, considere remover as não utilizadas. Você também pode mover relações para um banco de dados vinculado separado e usar uma fórmula de pesquisa para trazer apenas o valor necessário.

Coluna de Rollup Causa Recálculo de Todas as Linhas

Uma coluna de rollup que agrega dados de uma relação (como “Contagem de Tarefas” ou “Soma de Horas”) força o Notion a recalcular o rollup para cada linha quando o banco de dados é classificado. Para evitar isso, remova a coluna de rollup da visualização ou substitua-a por uma fórmula que calcule o valor apenas quando você abrir a página.

Classificação de Relação vs Classificação de Fórmula: Desempenho Comparado

Item Classificar na Coluna de Relação Classificar na Coluna de Fórmula (valor resolvido)
Método de resolução Busca dados da página vinculada para cada linha no momento da classificação Usa valor pré-computado armazenado na célula da fórmula
Linhas afetadas Todas as linhas na visualização do banco de dados Apenas linhas que mudaram desde a última edição
Velocidade com 500 linhas 1–3 segundos de lentidão típica Menos de 0,5 segundos
Velocidade com 2.000 linhas 5–10 segundos de lentidão típica 1–2 segundos
Impacto em rollups Força todos os rollups a recalcular Nenhum impacto em rollups, a menos que a fórmula os referencie
Comportamento do cache Invalida o cache de relação para a visualização Usa cache de fórmula, sem invalidação do cache de relação

Classificar em uma coluna de fórmula que armazena o valor resolvido da relação é consistentemente mais rápido do que classificar diretamente na coluna de relação. A diferença se torna mais perceptível à medida que o banco de dados cresce.

Agora você entende por que classificar uma coluna de relação dispara um recálculo completo do banco de dados e como contornar isso. Crie uma coluna de fórmula que extraia o valor da relação necessário para classificação. Aplique sua classificação a essa coluna de fórmula em vez da coluna de relação. Para bancos de dados com mais de 1.000 linhas, essa única mudança pode reduzir o tempo de classificação de vários segundos para menos de um segundo.

ADVERTISEMENT