SQLite是否在查询中扫描未使用的表?

问题描述 投票:0回答:1

我有这样的查询

explain query plan select t1.c from t1, t2 where t1.id = 0;

回归是

selectid order from  detail
"0"      "0"    "0" "SEARCH TABLE t1 USING PRIMARY KEY (id=?)"
"0"      "1"    "1" "SCAN TABLE t2"

在我的情况下,t2不在where或select子句中使用。为什么SQLite仍计划扫描它......?

sqlite
1个回答
1
投票

documentation说:

如果join-operator是...逗号(“,”)并且没有ON或USING子句,则连接的结果只是左侧和右侧数据集的笛卡尔积。

因此需要扫描另一个表以确定要返回的行数:

> CREATE TABLE t1(c);
> INSERT INTO t1 VALUES ('c');
> CREATE TABLE t2(x);
> INSERT INTO t2 VALUES (1), (2);
> select t1.c from t1, t2;
c
c
© www.soinside.com 2019 - 2024. All rights reserved.