

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Pengoptimalan kueri
<a name="query-optimize"></a>

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

Saat Anda menanyakan metadata atau data mentah, gunakan `WHERE` klausa untuk memfilter menurut bidang metadata untuk mengurangi jumlah data yang dipindai. Gunakan operator berikut untuk membatasi pemindaian metadata:
+ Sama dengan (=)
+ Tidak sama (\! =)
+ SUKA
+ DI DALAM
+ AND
+ ATAU

Untuk properti atribut, gunakan bidang berikut untuk memfilter hasil. :
+ `double_attribute_value`
+ `int_attribute_value`
+ `boolean_attribute_value`
+ `string_attribute_value`

Bidang ini memberikan kinerja yang lebih baik daripada tabel **latest\_value\_time\_series** untuk properti aset tipe atribut.

**catatan**  
Gunakan literal di sisi kanan operator untuk membatasi pemindaian data dengan benar. Misalnya, kueri berikut berkinerja lebih buruk daripada menggunakan literal string ketat:  

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

**Example untuk filter metadata:**  

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

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

**Semua tabel data mentah (**raw\_time\_series, latest\_value\_time\_series, precomputed\_aggregates****) memiliki cap waktu yang terkait dengan barisnya**.** Selain filter metadata, gunakan filter `WHERE` klausa di `event_timestamp` lapangan untuk mengurangi jumlah data yang dipindai. Gunakan operasi berikut untuk membatasi pemindaian data mentah:
+ Sama dengan (=)
+ Lebih besar dari (>)
+ Kurang dari (<)
+ Lebih besar dari atau sama (>=)
+ Kurang dari atau sama (<=)
+ DI ANTARA
+ DAN

**Contoh filter**:
+  Saat menanyakan tabel **precomputed\_aggregates**, selalu tentukan filter kualitas dalam klausa. `WHERE` Ini mengurangi jumlah data yang dipindai kueri, terutama jika Anda mencari `BAD` atau `UNCERTAIN` data. 

   **Kami juga sangat menyarankan menggunakan filter resolusi (1m, 15m, 1h, atau 1d) saat menanyakan tabel precomputed\_aggregates.** Jika Anda tidak menentukan filter resolusi, AWS IoT SiteWise akan default ke pemindaian tabel lengkap di semua resolusi, yang tidak efisien. 
+  Saat menanyakan data mentah, fungsi stempel waktu juga dapat digunakan dalam `WHERE` klausa untuk memfilter jumlah data yang dipindai. Misalnya, kueri berikut hanya memindai 30 menit terakhir data dari tabel **raw\_time\_series**: 

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

**catatan**  
Tidak sama `(!=)` dan `OR` operator biasanya tidak menerapkan filter yang berarti untuk pemindaian data mentah. Filter pada nilai data mentah (string\_value, double\_value, dll.) Juga tidak membatasi pemindaian data mentah.

## Gabung optimasi
<a name="join-optimization"></a>

AWS IoT SiteWise SQL mendukung `JOIN` kata kunci untuk menggabungkan dua tabel bersama-sama. Hanya `JOIN` s yang secara aktif memfilter pada bidang (menggunakan `ON` kata kunci) yang didukung. Bergabung dengan Cartesian penuh dilarang.

AWS IoT SiteWise juga mendukung implisit `JOIN` s tanpa menggunakan `JOIN` kata kunci. Ini diperbolehkan antara tabel metadata yang berbeda dan antara tabel metadata dan tabel mentah. Misalnya, kueri ini:

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

Berkinerja lebih baik dari kueri setara ini:

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

Gabungan implisit berikut diperbolehkan (O diperbolehkan, X dilarang):


|  | aset | aset\_property | terbaru\_value\_time\_series | raw\_time\_seri | precomputed\_aggregates | subkueri | 
| --- | --- | --- | --- | --- | --- | --- | 
| aset | X | O | O | O | O | X | 
| aset\_property | O | X | O | O | O | X | 
| terbaru\_value\_time\_series | O | O | X | X | X | X | 
| raw\_time\_seri | O | O | X | X | X | X | 
| precomputed\_aggregates | O | O | X | X | X | X | 
| subkueri | X | X | X | X | X | X | 

Gunakan implisit `JOIN` s jika memungkinkan. Jika Anda harus menggunakan `JOIN` kata kunci, terapkan filter pada tabel `JOIN` ed individu untuk meminimalkan data yang dipindai. Misalnya, alih-alih kueri ini:

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

Gunakan kueri yang lebih efisien ini:

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

Dengan mendorong filter metadata ke subkueri, Anda memastikan bahwa masing-masing tabel di `JOIN` s disaring selama proses pemindaian. Anda juga dapat menggunakan `LIMIT` kata kunci dalam subquery untuk efek yang sama.

## Kueri besar
<a name="large-queries"></a>

Untuk kueri yang menghasilkan lebih banyak baris daripada default, atur ukuran halaman [ExecuteQuery](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_ExecuteQuery.html)API ke nilai maksimum 20000. Ini meningkatkan kinerja kueri secara keseluruhan.

Gunakan `LIMIT` klausa untuk mengurangi jumlah data yang dipindai untuk beberapa kueri. Perhatikan bahwa fungsi agregat dan klausa lebar tabel tertentu (`GROUP BY`,`ORDER BY`,`JOIN`) memerlukan pemindaian penuh untuk diselesaikan sebelum menerapkan klausa. `LIMIT`

**catatan**  
 AWS IoT SiteWise dapat memindai jumlah minimum data bahkan dengan `LIMIT` klausa yang diterapkan, terutama untuk kueri data mentah yang memindai beberapa properti. 