理解扳手解释

Understanding spanner explanation

我在 Google Cloud Spanner 中有一个 table 的 860M 行,我正在尝试了解解释的工作原理。

table 有一个字符串列 geoid 并且该列有一个索引。

当我运行下面的查询只需要36ms:

SELECT count(*)
FROM usbg_2015
WHERE geoid= '340170175001'

Table结构为:

CREATE TABLE usbg_2015 (
    geoid STRING(12),
    quadkey STRING(24),
) PRIMARY KEY (geoid, quadkey)

但是,我不明白为什么解释说它使用 Table Scan 而不是 Index Scan .我将 Table 扫描 理解为对 table 的完整扫描,在这种情况下读取 860M 行,它应该花费超过 36 毫秒的时间。我错过了什么?

在解释中,Table扫描仅仅意味着它从table读取数据,并不一定意味着完整的table扫描。索引扫描也是如此。这意味着它正在从索引中读取。在这两种情况下,如果有一个可搜索的谓词(例如,主键或索引列上的常量前缀),它们将进行搜索。

该计划使用基础 table,并搜索并扫描了 11 行,否则您会看到 Table 扫描返回 860M 行。

大地水准面是 table usbg_2015 的前导主键列吗?这是我能想到的唯一解释。

table扫描有两个意思:

1- 当您按主键搜索时(或者在您的情况下是主键的第一部分)

2- 当您执行索引扫描并在 select 列表中列出既不在索引中也不在存储子句中的列时,您必须将索引与 table 本身。此操作称为 table 扫描。