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