【发布时间】:2021-10-12 15:29:34
【问题描述】:
我有一个包含 2 个表的 SQLite 数据库,其中一个引用另一个:
> create table commenters (
id integer primary key autoincrement,
<snip>
displayName text not null,
<snip>
);
> create table comments (
id integer primary key autoincrement,
<snip>
commenterID text not null,
<snip>
);
在 cmets 表中的 commenterID 上有一个索引:
> create index comments_commenter_id on comments (commenterID);
以下 2 个查询在单独运行时实际上是即时的:
> select id from commenters where displayName = "somename";
12345
> select * from comments where commenterID = 12345;
many results...
对我来说,将上述内容组合成子查询的以下查询应该同样快:
select * from comments where commenterID = (select id from commenters where displayName = "somename");
但是,该查询需要数十秒才能运行。这个带有连接的查询也很慢:
select comments.*
from commenters left join comments
on commenters.id = comments.commenterID
where commenters.displayName = "somename";
在我看来,数据库似乎没有将索引用于后面的查询,因为结果会慢慢流入。这是 SQLite 的一个已知怪癖吗?
【问题讨论】:
-
commenterID text。这应该是integer以匹配它所引用的 ID。 -
天哪,我是个白痴。谢谢!
标签: sql performance sqlite