Google Cloud Spanner 何时进行全表扫描?

问题描述 投票:0回答:1
CREATE TABLE Account (
  ID STRING(100) NOT NULL,
  BSB STRING(20) NOT NULL,
  AccNum STRING(100) NOT NULL,
) PRIMARY KEY(ID);

在这个

Account
表中,
ID
是唯一的主键。
BSB
AccNum
上没有索引,并且这两列上没有唯一约束。

显然,

BSB
重复更多,而
AccNum
更像是独特的。

假设表中有1000万条记录。当我执行以下查询时,我可以看到查询计划可视化工具没有显示全表扫描。

它说,

对帐户进行表扫描,返回行数:1”

SELECT * FROM account WHERE AccNum = "001"

但是当我执行以下查询时,查询会进行全表扫描。查询计划可视化工具显示:

帐户全扫描表扫描,返回行:3,000,000”

SELECT * FROM account WHERE BSB = "100"

我的问题:

  1. 为什么第二条SQL触发了全表扫描,而第一条SQL却没有?
  2. 我认为如果
    WHERE
    子句中的字段没有索引,则应该进行全表扫描。是吗?
  3. 第一个SQL需要8ms,第二个SQL需要30s。我可以理解,由于全表扫描,第二个需要 30 秒。我想知道Spanner在没有全表扫描的情况下,实际上是如何查找第一个SQL的记录的?
sql database google-cloud-spanner
1个回答
0
投票

由于实际答案有点隐藏在评论中:

AccNum
上有一个二级索引,避免了全表扫描。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.