我在Google Cloud Spanner中有一个8.6亿行的表格,我试图了解解释的工作原理。
该表有一个字符串列geoid
,并且在此列有一个索引。
当我运行以下查询时,仅需36毫秒:
SELECT count(*)
FROM usbg_2015
WHERE geoid= '340170175001'
表结构为:
CREATE TABLE usbg_2015 (
geoid STRING(12),
quadkey STRING(24),
) PRIMARY KEY (geoid, quadkey)
但是,我不明白为什么解释说它使用表扫描而不是索引扫描。我将表扫描理解为对表的完整扫描,在这种情况下,读取860M行,它需要的时间超过36ms。我想念的是什么?
最佳答案
在说明中,“表扫描”仅表示它从表中读取数据,并不一定表示全表扫描。索引扫描也是如此。这意味着它正在从索引中读取。在这两种情况下,如果都有可搜索的谓词(例如,主键或索引列上的常量前缀),它们将进行搜索。
该计划使用了基本表,并搜索并扫描了11行,否则您将看到从表扫描中返回了860M行。
大地水准面是表usbg_2015的前导主键列吗?这是我能想到的唯一计划的解释。
关于google-cloud-spanner - 了解 Spanner 说明,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58494969/