我有一个 Cloud Spanner 表,其主键顺序未指定,因此默认为 ASC(升序)。我有一个查询,我想按 DESC(降序)顺序按主键对结果进行排序。根据 Cloud Spanner 文档,ORDER BY DESC 似乎不是以相反顺序扫描表的最有效方式。据我了解,执行反向扫描的正确方法是在表上创建反向索引。这是最好的方法,还是我能做的更好?
问问题
429 次
1 回答
1
没错,目前在 Cloud Spanner 中 ORDER BY DESC 不如按键顺序扫描(如果键是 ASC 顺序)高效。您可以使用 DESC 排序创建二级索引,也可以在表本身的主键中使用 DESC 排序(不幸的是,这需要您重新创建表)。
通常,任何与表或索引的排序不匹配的 ORDER BY 子句都需要排序步骤,因此会影响性能。因此,如果表或索引的排序方式相同,则 ORDER BY DESC 扫描将是高效的。如果某些关键组件按 ASC 排序而有些按 DESC 排序,这将变得特别复杂,因此最好确保 ORDER BY 子句与表或索引的顺序完全匹配。需要了解的重要一点是 Spanner 按主键顺序存储数据(请参阅https://cloud.google.com/spanner/docs/schema-and-data-model#primary_keys),并且存储格式支持有效的前向扫描. 对于索引,主键是一组列,可用于在索引中查找项目。
于 2017-02-16T18:32:52.783 回答