gpt4 book ai didi

sqlite 在左连接中使用了错误的索引

转载 作者:行者123 更新时间:2023-12-03 18:35:33 36 4
gpt4 key购买 nike

我用左连接加入两个表:

第一个表很简单

create table L (
id integer primary key
);

并且只包含少量记录。

第二张表是
create table R (
L_id null references L,
k text not null,
v text not null
);

并包含数百万条记录。

以下两个索引在 R 上:
create index R_ix_1 on R(L_id);
create index R_ix_2 on R(k);

这个选择语句,恕我直言,选择了错误的索引:
select
L.id,
R.v
from
L left join
R on
L.id = R.L_id and
R.k = 'foo';

一个 explain query plan告诉我 select 语句使用索引 R_ix_2 , select 的执行花费了太多时间。我相信性能会很多
如果 sqlite 选择使用 R_ix_1 会更好反而。

我也试过
select
L.id,
R.v
from
L left join
R indexed by R_ix_1 on
L.id = R.L_id and
R.k = 'foo';

但这给了我 Error: no query solution .

我可以做些什么来让 sqlite 使用其他索引吗?

最佳答案

您的连接条件依赖于 2 列,因此您的索引应涵盖这 2 列:

create index R_ix_1 on R(L_id, k);

如果你做一些只依赖单列的其他查询,你可以保留旧索引,但你仍然需要这个双列索引:
create index R_ix_1 on R(L_id);
create index R_ix_2 on R(k);
create index R_ix_3 on R(L_id, k);

关于sqlite 在左连接中使用了错误的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26037420/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com