为什么加入搜索不使用sqlite中的索引

时间:2016-07-08 03:36:34

标签: sql sqlite

像这样的表模式:

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查询?

2 个答案:

答案 0 :(得分:1)

tbl1.companyidtbl2.relatedcompanyid有不同affinitiesint为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=?)