添加INDEX后查询较慢

时间:2014-01-26 12:55:03

标签: performance sqlite indexing

查询如下所示:

SELECT ... FROM ...
LEFT OUTER JOIN ... WHERE col1 = ? AND col2 = ? AND col3 IS NULL ORDER BY ...

SELECT ... FROM ...
WHERE col3 IS NULL ORDER BY ...

col1,col2有索引,但col3没有。

我决定为col3添加索引,因为查询稍慢,从每秒查询的0002s到0.4s(所有这些都需要1.3秒):

CREATE INDEX col3_idx ...
REINDEX col3_idx;

但在此之后他们变慢了。查询现在需要20秒。

我认为索引应该加速选择:/

我怀疑与IS NULL有关。索引不能与IS NULL一起使用吗?

1 个答案:

答案 0 :(得分:0)

你的主要问题不是NULL,而是你创建了三个不同的索引,而不是一个。

对于第一个查询,我建议(col1, col2, col3)上的索引。

但是,如果您只有NULL / 1值,则第二个查询可能难以索引,因为在这种情况下执行全表扫描可能更好。但索引也与排序有关,因此看到ORDER BY子句也很有意思,那么也可以为这个查询定义一个好的索引(甚至可能是两个查询的好索引!)。

参考文献: