[英]How does DISTINCT ON work in GCP datastore
假設我有一個名為“審計”的種類,它有以下條目:
租戶ID | 跟蹤標識 | 事件ID |
---|---|---|
租戶1 | traceId1 | 事件1 |
租戶1 | traceId1 | 事件2 |
租戶1 | traceId2 | 事件3 |
租戶1 | traceId2 | 事件4 |
我需要獲取 traceId 上唯一的所有行,以第一個條目為准,因此查詢應導致:
租戶ID | 跟蹤標識 | 事件ID |
---|---|---|
租戶1 | traceId1 | 事件1 |
租戶1 | traceId2 | 事件3 |
對於以上內容,我使用select distinct on(traceId) * from audit
盡管這是一個簡單的查詢,但隨着條目的增加,我擔心的是該查詢的性能。 我將在數據存儲中擁有數十萬個條目,但其中 50% 可能在 traceId 上是唯一的。
我讀過數據存儲不用於聚合。 所以,我的問題是:
在考慮聚合查詢時是否不同?
distinct on
子句確保只返回指定屬性的每個不同值組合的第一個結果。 所以它不被視為聚合查詢。 此外,Datastore 不支持聚合查詢。
基於索引的查詢機制支持廣泛的查詢,適用於大多數應用。 但是,它不支持其他數據庫技術中常見的某些類型的查詢:特別是,Datastore 模式查詢引擎不支持連接和聚合查詢。
您可以在本文檔中閱讀相關信息
distinct on
在索引掃描上工作嗎?
是的, distinct on
適用於索引掃描,您不能將distinct on
應用於任何未索引的屬性。
distinct on
會增加我的閱讀成本嗎?
如果您正在使用投影查詢,那么使用distinct on
將增加成本,因為它會使查詢超出此處提到的小操作。 如果您不使用投影查詢,那么它將根據實體讀取收費。
內置索引會處理 distinct on 還是我們應該定義復合索引?
如果您將distinct on
應用於單個屬性,即select distinct on(traceId) * from audit
,那么它將使用在實體創建期間創建的內置索引。 如果您將distinct on
應用於多個屬性,即select distinct on(traceId,eventId) * from audit
那么它將不適用於內置索引,您必須創建一個復合索引。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.