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

时间:2018-03-02 21:37:29

标签: sqlite

我有这样的查询

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仍打算扫描它??

1 个答案:

答案 0 :(得分: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