

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Optimierung der Abfrage
<a name="query-optimize"></a>

## Metadatenfilter
<a name="metadata-filters"></a>

Wenn Sie Metadaten oder Rohdaten abfragen, verwenden Sie die `WHERE` Klausel, um nach Metadatenfeldern zu filtern, um die Menge der gescannten Daten zu reduzieren. Verwenden Sie die folgenden Operatoren, um den Metadatenscan einzuschränken:
+ Entspricht (=)
+ Nicht gleich (\$1 =)
+ LIKE
+ IN
+ AND
+ ODER

Verwenden Sie für Attributeigenschaften die folgenden Felder, um die Ergebnisse zu filtern. :
+ `double_attribute_value`
+ `int_attribute_value`
+ `boolean_attribute_value`
+ `string_attribute_value`

Diese Felder bieten eine bessere Leistung als die Tabelle **latest\$1value\$1time\$1series** für Asset-Eigenschaften des Attributtyps.

**Anmerkung**  
Verwenden Sie Literale auf der rechten Seite der Operatoren, um den Datenscan richtig einzuschränken. Die folgende Abfrage schneidet beispielsweise schlechter ab als die Verwendung eines strikten Zeichenkettenliterals:  

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

**Example für Metadatenfilter:**  

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

## Rohdatenfilter
<a name="raw-data-filters"></a>

**Allen Rohdatentabellen (**raw\$1time\$1series, latest\$1value\$1time\$1series****, precomputed\$1aggregates**) sind Zeitstempel mit ihren Zeilen verknüpft.** Verwenden Sie zusätzlich zu den Metadatenfiltern auch Klauselfilter für das Feld, um die Menge der gescannten Daten zu reduzieren. `WHERE` `event_timestamp` Verwenden Sie die folgenden Operationen, um den Scan von Rohdaten einzuschränken:
+ Entspricht (=)
+ größer als (>)
+ Kleiner als (<)
+ Größer als oder gleich (> =)
+ Kleiner als oder gleich (< =)
+ BETWEEN
+ AND

**Beispiele für Filter**:
+  Geben Sie bei der Abfrage der Tabelle **precomputed\$1aggregates** immer einen Qualitätsfilter in der Klausel an. `WHERE` Dadurch wird die Datenmenge reduziert, die von der Abfrage gescannt wird, insbesondere wenn Sie nach OR-Daten suchen. `BAD` `UNCERTAIN` 

   **Wir empfehlen außerdem dringend, bei der Abfrage der Tabelle precomputed\$1aggregates einen Auflösungsfilter (1m, 15m, 1h oder 1d) zu verwenden.** Wenn Sie keinen Auflösungsfilter angeben, AWS IoT SiteWise wird standardmäßig ein vollständiger Tabellenscan für alle Auflösungen verwendet, was ineffizient ist. 
+  Bei der Abfrage von Rohdaten können in der `WHERE` Klausel auch Zeitstempelfunktionen verwendet werden, um die Menge der gescannten Daten zu filtern. Die folgende Abfrage scannt beispielsweise nur die Daten der letzten 30 Minuten aus der Tabelle **raw\$1time\$1series**: 

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

**Anmerkung**  
Entspricht nicht `(!=)` und `OR` Operatoren wenden normalerweise keine aussagekräftigen Filter auf den Rohdatenscan an. Filter für Rohdatenwerte (string\$1value, double\$1value usw.) schränken den Rohdatenscan ebenfalls nicht ein.

## JOIN-Optimierung
<a name="join-optimization"></a>

AWS IoT SiteWise SQL unterstützt das `JOIN` Schlüsselwort zum Zusammenführen von zwei Tabellen. Es werden nur `JOIN` s unterstützt, die aktiv nach einem Feld filtern (mithilfe des `ON` Schlüsselworts). Vollständige kartesische Verknüpfungen sind verboten.

AWS IoT SiteWise unterstützt auch implizite `JOIN` s, ohne das Schlüsselwort zu verwenden. `JOIN` Diese sind zwischen verschiedenen Metadatentabellen sowie zwischen einer Metadatentabelle und einer Rohtabelle zulässig. Beispielsweise würde diese Abfrage:

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

Erbringt eine bessere Leistung als diese entsprechende Abfrage:

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

Die folgenden impliziten Verknüpfungen sind zulässig (O ist erlaubt, X ist verboten):


|  | Komponente | asset\$1property | Zeitreihe mit neuestem Wert | raw\$1time\$1series | vorberechnete\$1Aggregate | subquery | 
| --- | --- | --- | --- | --- | --- | --- | 
| Komponente | X | O | O | O | O | X | 
| Vermögensgegenstand | O | X | O | O | O | X | 
| Zeitreihe mit neuestem Wert | O | O | X | X | X | X | 
| raw\$1time\$1series | O | O | X | X | X | X | 
| vorberechnete\$1Aggregate | O | O | X | X | X | X | 
| subquery | X | X | X | X | X | X | 

Verwenden Sie nach Möglichkeit implizit. `JOIN` Wenn Sie das `JOIN` Schlüsselwort verwenden müssen, wenden Sie Filter auf die einzelnen ED-Tabellen an, um die `JOIN` Anzahl der gescannten Daten zu minimieren. Zum Beispiel anstelle dieser Abfrage:

```
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%'
```

Verwenden Sie diese effizientere Abfrage:

```
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%'
```

Indem Sie Metadatenfilter in Unterabfragen einfügen, stellen Sie sicher, dass einzelne Tabellen in den `JOIN` s während des Scanvorgangs gefiltert werden. Sie können das `LIMIT` Schlüsselwort auch in Unterabfragen verwenden, um den gleichen Effekt zu erzielen.

## Große Abfragen
<a name="large-queries"></a>

Für Abfragen, die mehr Zeilen als die Standardeinstellung erzeugen, legen Sie die Seitengröße der [ExecuteQuery](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_ExecuteQuery.html)API auf den Maximalwert von 20000 fest. Dies verbessert die allgemeine Abfrageleistung.

Verwenden Sie die `LIMIT` Klausel, um die Menge der gescannten Daten für einige Abfragen zu reduzieren. Beachten Sie, dass für Aggregatfunktionen und bestimmte tabellenweite Klauseln (`GROUP BY`,`ORDER BY`,`JOIN`) ein vollständiger Scan erforderlich ist, bevor die Klausel angewendet wird. `LIMIT`

**Anmerkung**  
 AWS IoT SiteWise kann selbst bei angewendeter `LIMIT` Klausel eine minimale Datenmenge scannen, insbesondere bei Rohdatenabfragen, bei denen mehrere Eigenschaften gescannt werden. 