

如需與 Amazon Timestream for LiveAnalytics 類似的功能，請考慮使用 Amazon Timestream for InfluxDB。它提供簡化的資料擷取和單一位數毫秒查詢回應時間，以進行即時分析。[在這裡](https://docs.aws.amazon.com//timestream/latest/developerguide/timestream-for-influxdb.html)進一步了解。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用查詢洞見回應最佳化查詢
<a name="optimize-query-using-query-insights"></a>

假設您使用 Amazon Timestream for LiveAnalytics 來監控不同位置的能源消耗。假設您在名為 `raw-metrics`和 的資料庫中有兩個資料表`aggregate-metrics`。

`raw-metrics` 資料表會在裝置層級存放詳細的能源資料，並包含下列資料欄：
+ 時間戳記
+ 狀態，例如 Washington
+ 裝置 ID
+ 能源消耗

此資料表的資料會以minute-by-minute的精細程度收集和儲存。資料表使用 `State`做為 CDPK。

`aggregate-metrics` 資料表會儲存排程查詢的結果，以每小時彙總所有裝置的能源消耗資料。此資料表包含下列資料欄：
+ 時間戳記
+ 狀態，例如 Washington
+ 總能耗

`aggregate-metrics` 資料表會以每小時的精細程度存放此資料。資料表使用 `State`做為 CDPK。

**Topics**
+ [查詢過去 24 小時的能源消耗](#query-energy-consumption-data)
+ [最佳化暫時範圍的查詢](#optimize-query-temporal-range)
+ [最佳化空間涵蓋範圍的查詢](#optimize-query-spatial-coverage)
+ [改善查詢效能](#improved-query-performance)

## 查詢過去 24 小時的能源消耗
<a name="query-energy-consumption-data"></a>

假設您想要擷取過去 24 小時內在華盛頓消耗的總能源。若要尋找此資料，您可以利用兩個資料表的強度： `raw-metrics`和 `aggregate-metrics`。`aggregate-metrics` 資料表提供過去 23 小時的每小時能源消耗資料，而`raw-metrics`資料表則提供過去 1 小時的分鐘精細資料。透過跨兩個資料表進行查詢，您可以取得過去 24 小時內華盛頓州能源消耗的完整和準確情況。

```
SELECT am.time, am.state, am.total_energy_consumption, 
rm.time, rm.state, rm.device_id, rm.energy_consumption
FROM 
 "metrics"."aggregate-metrics" am
 LEFT JOIN "metrics"."raw-metrics" rm ON am.state = rm.state
WHERE rm.time >= ago(1h) and rm.time < now()
```

此範例查詢僅供說明之用，可能無法正常運作。它旨在示範概念，但您可能需要修改它以符合您的特定使用案例或環境。

執行此查詢後，您可能會注意到查詢回應時間比預期慢。若要識別此效能問題的根本原因，您可以使用查詢洞察功能來分析查詢的效能並最佳化其執行。

下列範例顯示查詢洞見回應。

```
queryInsightsResponse={
                QuerySpatialCoverage: {
                    Max: {
                        Value: 1.0,
                        TableArn: arn:aws:timestream:us-east-1:123456789012:database/metrics/table/raw-metrics,
                        PartitionKey: [State]
                    }
                },
                QueryTemporalRange: {
                    Max: {
                        Value:31540000000000000 //365 days,
                        TableArn: arn:aws:timestream:us-east-1:123456789012:database/metrics/table/aggregate-metrics
                    }
                },
                QueryTableCount: 2,
                OutputRows: 83,
                OutputBytes: 590
```

查詢洞見回應提供下列資訊：
+ **暫時範圍**：查詢掃描`aggregate-metrics`了資料表超過 365 天的暫時範圍。這表示暫時篩選的使用效率不佳。
+ **空間涵蓋**範圍：查詢掃描了`raw-metrics`資料表的整個空間範圍 (100%)。這表示空間篩選未有效使用。

如果您的查詢存取多個資料表，查詢洞察會提供具有最多次最佳存取模式之資料表的指標。

## 最佳化暫時範圍的查詢
<a name="optimize-query-temporal-range"></a>

根據查詢洞見回應，您可以最佳化暫時範圍的查詢，如下列範例所示。

```
SELECT am.time, am.state, am.total_energy_consumption, 
rm.time, rm.state, rm.device_id, rm.energy_consumption
FROM 
  "metrics"."aggregate-metrics" am
  LEFT JOIN "metrics"."raw-metrics" rm ON am.state = rm.state
WHERE 
  am.time >=  ago(23h) and am.time < now()
  AND rm.time >=  ago(1h) and rm.time < now()
  AND rm.state = 'Washington'
```

如果您再次執行`QueryInsights`命令，它會傳回下列回應。

```
queryInsightsResponse={
                QuerySpatialCoverage: {
                    Max: {
                        Value: 1.0,
                        TableArn: arn:aws:timestream:us-east-1:123456789012:database/metrics/table/aggregate-metrics,
                        PartitionKey: [State]
                    }
                },
                QueryTemporalRange: {
                    Max: {
                        Value: 82800000000000 //23 hours,
                        TableArn: arn:aws:timestream:us-east-1:123456789012:database/metrics/table/aggregate-metrics
                    }
                },
                QueryTableCount: 2,
                OutputRows: 83,
                OutputBytes: 590
```

此回應顯示`aggregate-metrics`資料表的空間涵蓋範圍仍然是 100%，這是無效的。下一節說明如何最佳化空間涵蓋範圍的查詢。

## 最佳化空間涵蓋範圍的查詢
<a name="optimize-query-spatial-coverage"></a>

根據查詢洞見回應，您可以最佳化空間涵蓋範圍的查詢，如下列範例所示。

```
SELECT am.time, am.state, am.total_energy_consumption, 
rm.time, rm.state, rm.device_id, rm.energy_consumption
FROM 
  "metrics"."aggregate-metrics" am
  LEFT JOIN "metrics"."raw-metrics" rm ON am.state = rm.state
WHERE 
  am.time >=  ago(23h) and am.time < now()
  AND am.state ='Washington'
  AND rm.time >=  ago(1h) and rm.time < now()
  AND rm.state = 'Washington'
```

如果您再次執行`QueryInsights`命令，它會傳回下列回應。

```
queryInsightsResponse={
                QuerySpatialCoverage: {
                    Max: {
                        Value: 0.02,
                        TableArn: arn:aws:timestream:us-east-1:123456789012:database/metrics/table/aggregate-metrics,
                        PartitionKey: [State]
                    }
                },
                QueryTemporalRange: {
                    Max: {
                        Value: 82800000000000 //23 hours,
                        TableArn: arn:aws:timestream:us-east-1:123456789012:database/metrics/table/aggregate-metrics
                    }
                },
                QueryTableCount: 2,
                OutputRows: 83,
                OutputBytes: 590
```

## 改善查詢效能
<a name="improved-query-performance"></a>

最佳化查詢之後，查詢洞見會提供下列資訊：
+ `aggregate-metrics` 資料表的暫時剔除為 23 小時。這表示只會掃描 23 小時的時間範圍。
+ `aggregate-metrics` 資料表的空間剔除為 0.02。這表示只會掃描資料表空間範圍資料的 2%。查詢會掃描極少部分的資料表，進而快速提升效能並降低資源使用率。改善的剔除效率表示查詢現在已針對效能進行最佳化。