假设我有一种名为"audit"的类型,它有以下条目:
tenantId | traceId | eventId |
---|---|---|
tenant1 | traceId1 | 事件1>|
tenant1 | traceId1 | 事件2|
tenant1 | traceId2 | >td style="text-align:right;">event3|
tenant1 | traceId2 | >td style="text-align:right;">event4
是否将distinct视为聚合查询?
distinct on
子句确保只返回指定属性的每个不同值组合的第一个结果。因此,它不被视为聚合查询。此外,数据存储不支持聚合查询。
基于索引的查询机制支持广泛的查询,适用于大多数应用程序。然而,它不支持其他数据库技术中常见的某些类型的查询:特别是,数据存储模式查询引擎中不支持联接和聚合查询。
您可以在本文档中阅读
distinct on
是否适用于索引扫描?
是的,distinct on
适用于索引扫描,并且不能将distinct on
应用于任何未索引的属性。
distinct on
会增加我的读取成本吗?
如果您使用的是投影查询,那么使用distinct on
将增加成本,因为它将使查询超出此处提到的小操作。如果您不使用投影查询,那么它将根据实体读取进行收费。
内置索引会处理上的distinct吗?还是我们应该定义一个复合索引?
如果将distinct on
应用于单个属性,即select distinct on(traceId) * from audit
,则它将与实体创建过程中创建的内置索引一起使用。如果您将distinct on
应用于多个属性,即select distinct on(traceId,eventId) * from audit
,则它将无法与内置索引一起使用,您必须创建一个复合索引。