查询如下所示:
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一起使用吗?
答案 0 :(得分:0)
你的主要问题不是NULL,而是你创建了三个不同的索引,而不是一个。
对于第一个查询,我建议(col1, col2, col3)
上的索引。
但是,如果您只有NULL / 1值,则第二个查询可能难以索引,因为在这种情况下执行全表扫描可能更好。但索引也与排序有关,因此看到ORDER BY
子句也很有意思,那么也可以为这个查询定义一个好的索引(甚至可能是两个查询的好索引!)。
参考文献: