我加入了左邊的兩個表的連接:SQLite是使用錯誤的索引中左連接
第一個表是非常簡單
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語句,恕我直言,選擇了錯誤的指標:
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
,選擇的執行需要太多時間。如果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使用其他索引?
你確定'r_ix_1'存在並且包含你認爲它的作用嗎? – 2014-09-25 11:33:28
是的,我在sqlite3提示符下用'.schema R'確認。 – 2014-09-25 11:43:39