Como trabalhar com tabelas otimizadas para pesquisa

A otimização de pesquisa geralmente é transparente para os usuários. As consultas funcionam da mesma forma; algumas são apenas mais rápidas. No entanto, é importante estar ciente dos possíveis efeitos de outras operações de tabela no serviço de otimização de pesquisa, ou vice-versa.

Modificação da tabela

Um caminho de acesso de pesquisa torna-se inválido se o valor padrão de uma coluna for alterado.

Para usar a otimização de pesquisa novamente após um caminho de acesso de pesquisa ter se tornado inválido, você deve descartar a propriedade SEARCH OPTIMIZATION e adicionar a propriedade SEARCH OPTIMIZATION novamente à tabela.

Um caminho de acesso de pesquisa permanece válido se você adicionar, descartar ou renomear uma coluna:

  • Se você tiver habilitado a otimização de pesquisa para toda uma tabela sem definir as colunas específicas, quando você adiciona uma coluna a uma tabela, a nova coluna será adicionada automaticamente ao caminho de acesso de pesquisa. No entanto, se você tiver usado a cláusula ON ao habilitar a otimização de pesquisa para uma coluna, novas colunas não serão adicionadas automaticamente.

  • Quando você descarta uma coluna de uma tabela, a coluna descartada é removida automaticamente do caminho de acesso de pesquisa.

  • Renomear uma coluna não requer nenhuma mudança no caminho de acesso de pesquisa.

Se você descartar uma tabela, a propriedade SEARCH OPTIMIZATION e os caminhos de acesso de pesquisa também são descartados. Note que:

  • Descartar a tabela restabelece imediatamente a otimização de pesquisa como uma propriedade da tabela.

  • Quando você descarta uma tabela, o caminho de acesso de pesquisa tem o mesmo período de retenção de dados que a tabela.

Se você descartar a propriedade SEARCH OPTIMIZATION da tabela, o caminho de acesso de pesquisa será removido. Quando você adiciona a propriedade SEARCH OPTIMIZATION novamente à tabela, o serviço de manutenção precisa recriar o caminho de acesso da pesquisa. (Não há maneira de descartar a propriedade).

Clonagem de tabela, esquema ou banco de dados

Se você clonar uma tabela, esquema ou banco de dados, a propriedade SEARCH OPTIMIZATION e os caminhos de acesso de pesquisa de cada tabela também são clonados. A clonagem de uma tabela, esquema ou banco de dados cria um clone zero-copy de cada tabela e seus correspondentes caminhos de acesso de pesquisa. No entanto, se o caminho de acesso à pesquisa para uma tabela estiver desatualizado no momento em que o clone for criado, tanto a tabela original quanto a tabela clonada incorrerão em custos de manutenção para o serviço de otimização de pesquisa atualizar o caminho de acesso à pesquisa.

O caminho de acesso à pesquisa pode estar desatualizado se uma operação DML modificar significativamente uma tabela imediatamente antes da operação de clone. Por exemplo, se uma instrução INSERT resultar em um grande aumento no tamanho da tabela original, o caminho de acesso da pesquisa precisará de manutenção para refletir essa alteração.

Para evitar ou minimizar os custos das tarefas de manutenção de otimização de pesquisa na tabela clonada, siga uma ou ambas as etapas a seguir:

  1. Se você precisar deixar a otimização de pesquisa ativada na tabela clonada, verifique se o caminho de acesso à pesquisa está atualizado antes de executar a instrução CREATE TABLE … CLONE. Caso contrário, pule para a próxima etapa.

    Na maioria dos casos, você pode executar uma instrução SHOW TABLES e verificar o valor na coluna SEARCH_OPTIMIZATION_PROGRESS. Se o valor da coluna for 100, o caminho de acesso à pesquisa estará atualizado. No entanto, pode ser necessária manutenção se o caminho de acesso à pesquisa estiver sendo compactado para remover informações referentes aos dados da tabela de origem excluídos.

  2. Desative o serviço de otimização de pesquisa na tabela clonada imediatamente após a criação do clone. Por exemplo, para desabilitar o serviço de otimização de pesquisa na tabela t1, execute a seguinte instrução:

    ALTER TABLE t1 DROP SEARCH OPTIMIZATION;
    
    Copy

    Para obter mais informações, consulte Ações de otimização de pesquisa (searchOptimizationAction) no tópico ALTER TABLE.

Se você usar CREATE TABLE … LIKE para criar uma nova tabela vazia com as mesmas colunas da tabela original, a propriedade SEARCH OPTIMIZATION não será copiada para a nova tabela.

Como trabalhar com tabelas em um banco de dados secundário (suporte para replicação de banco de dados)

Se uma tabela no banco de dados primário tiver a propriedade SEARCH OPTIMIZATION ativada, a propriedade é replicada para a tabela correspondente no banco de dados secundário.

Os caminhos de acesso de pesquisa no banco de dados secundário não são replicados, mas sim reconstruídos automaticamente. Observe que este processo incorre nos mesmos tipos de custos descritos em Estimativa e gerenciamento de custos de otimização de pesquisa.

Compartilhamento de tabelas

Os provedores de dados podem usar Secure Data Sharing para compartilhar tabelas que tenham a otimização de pesquisa ativada.

Ao consultar tabelas compartilhadas, os consumidores de dados podem se beneficiar de qualquer melhoria de desempenho feita pelo serviço de otimização de pesquisa.

Políticas de mascaramento e políticas de acesso a linhas

O serviço de otimização de pesquisa é totalmente compatível com tabelas que usam políticas de mascaramento e políticas de acesso a linhas.

No entanto, quando a otimização de pesquisa é habilitada, um usuário que é impedido de ver um valor devido a uma política de mascaramento ou política de acesso a linhas pode ser capaz de deduzir com maior certeza se esse valor existe. Com ou sem otimização de pesquisa, as diferenças na latência da consulta podem fornecer dicas sobre a presença ou ausência de dados restritos por uma política, o que pode constituir um problema de segurança dependendo da sensibilidade dos dados. Esse efeito pode ser ampliado pela otimização de pesquisa, pois pode tornar uma consulta que não retorna resultados ainda mais rápida.

Por exemplo, suponha que uma política de acesso a linhas impeça um usuário de acessar linhas com country = 'US', mas os dados não incluem linhas com country = 'US'. Agora suponha que a otimização de pesquisa esteja habilitada para a coluna country e que o usuário execute uma consulta com WHERE country = 'US'. A consulta retorna resultados vazios como esperado, mas a consulta pode ser executada mais rapidamente com otimização de pesquisa do que sem ela. Neste caso, o usuário pode inferir qmais facilmente que os dados não contêm qualquer linha em que country = 'US' com base no tempo necessário para executar a consulta.