sqlite:唯一覆盖索引

时间:2015-11-05 05:15:29

标签: sqlite unique-index covering-index

假设我有一个表t1,其中包含三列A,B,C,其中(A,B)包含一个唯一键(具有数十万行)。由于90%的查询形式为SELECT C FROM t1 WHERE A =?和B = ?,我想我想要A,B和C的覆盖索引。

如何使用包含C的覆盖索引并将(A,B)定义为唯一?

我想要有两个索引:一个是唯一的,一个是覆盖,并使用INDEXED BY来强制SELECTS的覆盖索引。

这是否合理?

2 个答案:

答案 0 :(得分:1)

是的,这是合理的。

但是,在您这样做之前,我建议您尝试在A和B上放置主键并再次尝试查询。看看是否有性能提升。如果没有收获,您当然可以尝试使用create unique index idx_t1_ab on t1(a,b)强制执行唯一性。然后在A,B和C上创建索引。

答案 1 :(得分:1)

在SQLite 3.8.2或更高版本中,您可以将此表设为WITHOUT ROWID table,以便表本身的行为类似于覆盖索引:

CREATE TABLE t1 (
    A,
    B,
    C,
    PRIMARY KEY (A, B)
) WITHOUT ROWID;
相关问题