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"
我的问题:
WHERE
子句中的字段没有索引,则应该进行全表扫描。是吗?由于实际答案有点隐藏在评论中:
AccNum
上有一个二级索引,避免了全表扫描。