

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Otimização de consultas
<a name="query-optimize"></a>

## Filtros de metadados
<a name="metadata-filters"></a>

Ao consultar metadados ou dados brutos, use a `WHERE` cláusula para filtrar por campos de metadados para reduzir a quantidade de dados digitalizados. Use os seguintes operadores para limitar a verificação de metadados:
+ Igual (=)
+ Não é igual (>)
+ LIKE
+ IN
+ E
+ OU

Para propriedades de atributos, use os campos a seguir para filtrar os resultados. :
+ `double_attribute_value`
+ `int_attribute_value`
+ `boolean_attribute_value`
+ `string_attribute_value`

Esses campos oferecem melhor desempenho do que a tabela **latest\_value\_time\_series** para propriedades de ativos do tipo de atributo.

**nota**  
Use literais no lado direito dos operadores para limitar adequadamente a varredura de dados. Por exemplo, a consulta a seguir tem um desempenho pior do que usar uma string literal estrita:  

```
SELECT property_id FROM asset_property WHERE property_name = CONCAT('my', 'property')
```

**Example para filtros de metadados:**  

```
SELECT p.property_name FROM asset_property p
WHERE p.property_type = 'attribute' AND p.string_attribute_value LIKE 'my-property-%'
```

## Filtros de dados brutos
<a name="raw-data-filters"></a>

**Todas as tabelas de dados brutos (**raw\_time\_series, latest\_value\_time\_series****, precomputed\_aggregates) têm timestamps associados às suas linhas**.** Além dos filtros de metadados, use filtros de `WHERE` cláusula no `event_timestamp` campo para reduzir a quantidade de dados digitalizados. Use as seguintes operações para limitar a varredura de dados brutos:
+ Igual (=)
+ Maior que (>)
+ Menor que (<)
+ Maior ou igual a (>=)
+ Menor ou igual a (<=)
+ BETWEEN
+ E

**Exemplos de filtros**:
+  Ao consultar a tabela **precomputed\_aggregates**, sempre especifique um filtro de qualidade na cláusula. `WHERE` Isso reduz a quantidade de dados que a consulta verifica, especialmente se você estiver procurando `BAD` por `UNCERTAIN` dados. 

   **Também é altamente recomendável usar um filtro de resolução (1m, 15m, 1h ou 1d) ao consultar a tabela precomputed\_aggregates.** Se você não especificar um filtro de resolução, AWS IoT SiteWise usará como padrão uma varredura completa da tabela em todas as resoluções, o que é ineficiente. 
+  Ao consultar dados brutos, as funções de timestamp também podem ser usadas na `WHERE` cláusula para filtrar a quantidade de dados digitalizados. Por exemplo, a consulta a seguir verifica apenas os últimos 30 minutos de dados da tabela **raw\_time\_series**: 

  ```
  SELECT r.event_timestamp, r.double_value
  FROM raw_time_series r
  WHERE r.event_timestamp > TIMESTAMP_SUB(MINUTE, 30, NOW())
  ```

**nota**  
Não são iguais `(!=)` e os `OR` operadores normalmente não aplicam filtros significativos à verificação de dados brutos. Filtros em valores de dados brutos (string\_value, double\_value etc.) também não limitam a varredura de dados brutos.

## Otimização JOIN
<a name="join-optimization"></a>

AWS IoT SiteWise O SQL suporta a `JOIN` palavra-chave para mesclar duas tabelas. Somente `JOIN` aqueles que filtram ativamente em um campo (usando a `ON` palavra-chave) são suportados. As uniões cartesianas completas são proibidas.

AWS IoT SiteWise também suporta `JOIN` s implícitos sem usar a `JOIN` palavra-chave. Elas são permitidas entre tabelas de metadados diferentes e entre uma tabela de metadados e uma tabela bruta. Por exemplo, esta consulta:

```
SELECT a.asset_name, p.property_name FROM asset a, asset_property p
```

Tem um desempenho melhor do que essa consulta equivalente:

```
SELECT a.asset_name, p.property_name FROM asset a
JOIN asset_property p ON a.asset_id = p.asset_id
```

As seguintes junções implícitas são permitidas (O é permitido, X é proibido):


|  | asset | asset\_property | latest\_value\_time\_series | raw\_time\_series | precomputed\_aggregates | subconsulta | 
| --- | --- | --- | --- | --- | --- | --- | 
| asset | X | O | O | O | O | X | 
| asset\_property | O | X | O | O | O | X | 
| latest\_value\_time\_series | O | O | X | X | X | X | 
| raw\_time\_series | O | O | X | X | X | X | 
| precomputed\_aggregates | O | O | X | X | X | X | 
| subconsulta | X | X | X | X | X | X | 

Use `JOIN` s implícitos sempre que possível. Se você precisar usar a `JOIN` palavra-chave, aplique filtros nas tabelas de ensino individuais `JOIN` para minimizar os dados digitalizados. Por exemplo, em vez dessa consulta:

```
SELECT level1.asset_id, level2.asset_id, level3.asset_id
FROM asset AS level1
JOIN asset AS level2 ON level2.parent_asset_id = level1.asset_id
JOIN asset AS level3 ON level3.parent_asset_id = level2.asset_id
WHERE level1.asset_name LIKE 'level1%'
AND level2.asset_name LIKE 'level2%'
AND level3.asset_name LIKE 'level3%'
```

Use essa consulta mais eficiente:

```
SELECT level1.asset_id, level2.asset_id, level3.asset_id
FROM asset AS level1
JOIN (SELECT asset_id, parent_asset_id FROM asset WHERE asset_name LIKE 'level2%') AS level2 ON level2.parent_asset_id = level1.asset_id
JOIN (SELECT asset_id, parent_asset_id FROM asset WHERE asset_name LIKE 'level3%') AS level3 ON level3.parent_asset_id = level2.asset_id
WHERE level1.asset_name LIKE 'level1%'
```

Ao inserir filtros de metadados em subconsultas, você garante que tabelas individuais no `JOIN` s sejam filtradas durante o processo de digitalização. Você também pode usar a `LIMIT` palavra-chave em subconsultas para obter o mesmo efeito.

## Consultas grandes
<a name="large-queries"></a>

Para consultas que produzem mais linhas do que o padrão, defina o tamanho da página da [ExecuteQuery](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_ExecuteQuery.html)API para o valor máximo de 20000. Isso melhora o desempenho geral da consulta.

Use a `LIMIT` cláusula para reduzir a quantidade de dados digitalizados para algumas consultas. Observe que as funções agregadas e certas cláusulas de toda a tabela (`GROUP BY`,`ORDER BY`,`JOIN`) exigem uma verificação completa para serem concluídas antes de aplicar a cláusula. `LIMIT`

**nota**  
 AWS IoT SiteWise pode escanear uma quantidade mínima de dados mesmo com a `LIMIT` cláusula aplicada, especialmente para consultas de dados brutos que examinam várias propriedades. 