Loading

Perguntas frequentes da ferramenta Query Plan do Developer Console

Data da publicação: Aug 30, 2024
Descrição

A ferramenta Query Plan no Developer Console pode ajudar a acelerar as consultas SOQL feitas em grandes volumes. Use a ferramenta Query Plan para otimizar e acelerar as consultas feitas em grandes volumes.

 

Habilitar e usar a ferramenta Query Plan

  1. No Developer Console, clique em Ajuda | Preferências
  2. Defina "Habilitar Query Plan" como TRUE.


Depois de habilitada no Developer Console, a ferramenta Query Plan poderá ser acessada na guia "Query Editor" do console.

Para usar a ferramenta Query Plan, insira uma consulta no Query Editor e pressione Query Plan para exibir todas as operações de consulta e o custo de cada SOQL fornecido.

 
Resolução

Razões para usar a ferramenta Query Plan

Use essa ferramenta para ativar a Query Plan para qualquer consulta SOQL de execução lenta. Ela fornecerá percepções sobre os diferentes planos e, se alguns dos filtros estiverem indexados, fornecerá o custo de usar a indexação em comparação a uma verificação de tabela completa.

Se o custo da verificação da tabela for menor do que a indexação, e a consulta estiver atingindo o tempo limite, você precisará realizar análises adicionais sobre o uso de outros filtros para aprimorar a seletividade ou se houver outro filtro seletivo nessa consulta que não esteja indexado mas for candidato a um.
 

Determine se um filtro é seletivo:

  • Determine se ele tem uma indexação.
  • Se o filtro estiver em um campo padrão, ele terá uma indexação se for uma chave primária (Id, Name, OwnerId), uma chave externa (CreatedById, LastModifiedById, pesquisa, relacionamento mestre-detalhe) e um campo de auditoria (CreatedDate, SystemModstamp).
  • Os campos personalizados terão uma indexação se forem marcados como ID exclusivo ou externo
  • Se o filtro não tiver uma indexação, ele não será considerado para otimização.
  • Se o filtro tiver uma indexação, determine quantos registros ele retornará:
  • Para uma indexação padrão, o limite é 30% do primeiro milhão de registros almejados e 15% de todos os registros após o primeiro milhão. Além disso, o limite de seletividade para uma indexação padrão atinge no máximo 1 milhão de registros almejados, que você só poderia atingir se tivesse mais de 5,6 milhões de registros totais.
  • Para uma indexação personalizada, o limite de seletividade é de 10% do primeiro milhão de registros almejados e 5% de todos os registros após o primeiro milhão. Além disso, o limite de seletividade para uma indexação personalizada atinge o máximo em 333.333 registros de destino, que você só poderia atingir se tivesse mais de 5,6 milhões de registros.
  • Se o filtro exceder o limite, ele não será considerado para otimização.
  • Se o filtro não exceder o limite, ele será seletivo e o Query Optimizer o considerará para otimização.
 

O que tudo isso significa?

A ferramenta Query Plan mostrará uma lista de planos disponíveis que nosso Query Optimizer pode usar para a consulta fornecida, organizada por custo crescente.

Cada plano conterá informações sobre Cardinalidade, Tipo de operação, Custo, Tipo de sObject e muito mais. Cada plano tem um "Tipo de operação principal", por exemplo, Indexação de campo ou Verificação de tabela completa. O plano com o menor custo é o plano usado para direcionar a execução da consulta.

 
Cardinalidade
Campos
Tipo de operação principal
Custo
Cardinalidade de sObject
Tipo de sObject
O número estimado de registros que o tipo de operação principal retornaria.
Por exemplo, o número de registros retornados se estiver usando uma tabela de indexação.
 
Os campos indexados usados pelo Query Optimizer. Se o tipo de operação principal for Indexação, o valor dos campos será Indexação. Caso contrário, o valor dos campos será nulo.
O tipo de operação principal que o Salesforce usará para otimizar a consulta.
  • Indexação – A consulta usará uma indexação no objeto consultado.
  • Compartilhamento – A consulta usará uma indexação baseada nas regras de compartilhamento associadas ao usuário que está executando a consulta. Se houver regras de compartilhamento que limitam os registros que o usuário pode acessar, o Salesforce poderá usar essas regras para otimizar a consulta.
  • TableScan – A consulta verificará todos os registros do objeto consultado.
  • Outro – A consulta usará otimizações internas do Salesforce.
O custo da consulta em comparação ao limite de seletividade do Force.com Query Optimizer. Valores acima de 1 significam que a consulta não será seletiva.
A contagem aproximada de registros para o objeto consultado.
O nome consultado.
 

 

Como o custo é determinado?

Cada plano tem seu próprio valor de custo. O valor de custo é derivado das estatísticas mais recentes do banco de dados (DB) reunido na tabela e nos valores. O plano de menor custo será o plano utilizado. Se o custo for superior a 1, significa que a consulta não será seletiva.

 

Campo indexado não aparece na lista de planos

Se a consulta que você forneceu contiver um campo Indexado nos filtros, o plano será mostrado para esse campo apenas se você estiver usando uma operação com suporte em relação ao campo.

Veja a seguir uma lista das operações sem suporte:

  • A indexação personalizada nunca será usada quando as comparações estiverem sendo feitas com um operador como "NOT EQUAL TO"
  • A indexação personalizada nunca será usada quando as comparações estiverem sendo feitas com um valor nulo como "Name = ''"
  • Os caracteres curinga "%" iniciais são operadores ineficientes que também tornam as condições de filtro não seletivas
  • Ao usar uma comparação OR, todos os filtros devem ser indexados e estar abaixo do limite de 10%. . Se você tiver um campo não indexado ou se estiver acima de 10%, o plano não será exibido.

 

A ferramenta Query Plan exibe candidatos de indexação ou campos que podem ser indexados?

A ferramenta Query Plan mostrará apenas estatísticas de campo indexado na seção do plano, não os campos que podem ser indexados. Essa ferramenta não fornecerá informações sobre os campos que podem ser indexados.

Consulte Como tornar minha consulta SOQL seletiva para saber como determinar quais campos podem ser indexados.

 

Exemplos e como interpretar os resultados da Query Plan 

Os exemplos a seguir usam dois campos indexados. Uma caixa de seleção (InActiveAcc__c) e uma lista de opções (Account_Hierarchy__c) no sObject da conta.

Nota: Encontre mais exemplos de consultas na publicação original Piloto de parâmetros de feedback de recursos de consulta que fez com que essa nova ferramenta do Developer Console evoluísse.

 

Exemplo de consulta 1

SELECT count() FROM Account WHERE Account_Hierarchy__c = 'Parent'


Cenário: Um campo indexado com uma variável de ligação seletiva

O campo "Account_Hierarchy__c" é indexado e considerado para um plano com tipo de operação principal como "Indexação". O campo indexado tem um custo menor que TableScan, então a indexação será usada pelo Query Optimizer para essa consulta no Objeto da conta de 50.088 linhas.

 

Exemplo de consulta 2

SELECT count() FROM Account WHERE InActiveAcc__c = true AND Account_Hierarchy__c = 'Parent'


Cenário: 2 campos indexados, 1 seletivo

O que acontece se mais de um filtro simples for seletivo? Se mais de um filtro for considerado seletivo, o Query Optimizer escolherá aquele com custo mais baixo para conduzir o plano de execução da consulta.

 

Exemplo de consulta 3

SELECT count() FROM Account WHERE InActiveAcc__c = true AND Account_Hierarchy__c != 'Parent' **NOTA: usando operação sem suporte na indexação**


Cenário: 2 campos indexados, 1 seletivo, MAS usando uma operação sem suporte

A indexação em Account_Hierarchy__c não é usada ou considerada devido à operação sem suporte de "!=". Observe também que o InActiveAcc__c será usado, mas tem um custo maior do que 1. Conforme mencionado anteriormente, o filtro não é seletivo, mas será usado.

 

Exemplo de consulta 4

SELECT count() FROM Account WHERE Account_Hierarchy__c = 'Child'


Cenário: 1 campo indexado usando uma variável de ligação não seletiva (> 10% da contagem de linhas de sObject)

Aqui, o campo indexado Account_Hierarchy__c mostra um custo muito mais alto do que uma verificação de tabela completa. A razão para isso é que a Indexação não é seletiva com a variável de ligação "Filho", resultando em mais de 10% da tabela completa. O banco de dados executará uma verificação de tabela completa para essa consulta que, dependendo do tamanho de tabela completa, pode resultar em um desempenho ruim.
Número do artigo do Knowledge

000386864

 
Carregando
Salesforce Help | Article