sqlite> CREATE TABLE tbl1(seq int, companyid int, field1 int NULL, field2 int NULL, field3 int NULL, field4 int NULL, field5 int NULL);
sqlite> create index tbl1_idx on tbl1(seq);
sqlite> CREATE TABLE tbl2(symbolid int, relatedcompanyid char(64), value char(64), field1 int NULL, field2 int NULL, field3 int NULL, field4 int NULL, field5 int NULL);
sqlite> create index tbl2_idx on tbl2(relatedcompanyid);
sqlite> explain query plan select tbl2.value from tbl2, tbl1 where tbl1.seq = 100 and tbl1.companyid = tbl2.relatedcompanyid;
0|1|TABLE tbl1 WITH INDEX tbl1_idx
1|0|TABLE tbl2
为什么第二步不使用索引tbl2_idx,因为companyid已经进入第一步?如果使用索引,这个搜索会快得多 如何优化这个SQL查询?
答案 0 :(得分:1)
tbl1.companyid
和tbl2.relatedcompanyid
有不同affinities(int
为NUMBER,char(64)
为TEXT),因此比较这两列中的值{{3}在某些情况下,因此无法使用索引优化此查找。
答案 1 :(得分:0)
CREATE TABLE tbl2(symbolid int, relatedcompanyid int, value char(64), field1 int NULL, field2 int NULL, field3 int NULL, field4 int NULL, field5 int NULL);
create index tbl2_idx on tbl2(relatedcompanyid);
explain query plan select tbl2.value from tbl2, tbl1 where tbl1.seq = 100 and tbl1.companyid = tbl2.relatedcompanyid;
0|0|1|SEARCH TABLE tbl1 USING INDEX tbl1_idx (seq=?)
0|1|0|SEARCH TABLE tbl2 USING INDEX tbl2_idx (relatedcompanyid=?)