【问题标题】:Slower queries after adding INDEX添加 INDEX 后查询速度变慢
【发布时间】:2014-02-17 06:33:08
【问题描述】:

查询如下所示:

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 一起使用吗?

【问题讨论】:

    标签: performance sqlite indexing


    【解决方案1】:

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

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

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

    参考资料:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-25
      • 1970-01-01
      • 2015-03-22
      • 2019-07-27
      • 2021-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多