我可以索引 EXTRACT(从 startDateTime 开始的一周)吗?或者,查询规划器会直接在 'startDateTime' 上使用索引吗?

Can I index EXTRACT(WEEK from startDateTime)? Or, will the query planner use an index directly on 'startDateTime'?

我在某些 startDateTime 字段上索引了大量记录,并希望 select 对按 WEEKOFYEAR(startDateTime) 分组的所有记录进行聚合(SUM 和 COUNT)(即 EXTRACT(WEEK FROM startDateTime)).我可以在 EXTRACT(WEEK FROM startDateTime) 上放置二级索引吗?或者,更好的是,查询是否会适当地使用 startDateTime 上的索引来优化按周分组的请求?

参见 this similar question 关于 MySQL 指数。这在 Cloud Spanner 世界中将如何处理?

尚不支持生成列的二级索引(即 EXTRACT(WEEK FROM startDateTime))。如果您的覆盖索引包含查询所需的所有列(即 startDateTime 和分组和聚合所需的其他列),则计划器将在基础 table 上使用此类覆盖索引,但聚合可能基于哈希聚合。除非你在很长一段时间内聚合,否则这应该不是一个大问题(虽然我承认它并不理想)。

如果要限制聚合时间范围,需要按照startDateTime拼写(即需要将min/max日期时间转换为与startDateTime相同的类型)。

希望对您有所帮助。