sqlite:唯一覆盖索引

sqlite:唯一覆盖索引,sqlite,unique-index,covering-index,Sqlite,Unique Index,Covering Index,假设我有一个包含三列a、B、C的表t1,其中(a、B)包含一个唯一的键(有数十万行)。由于90%的查询将采用从t1中选择C的形式,其中A=?B=?,我想我想要一个a,B和C的覆盖指数 我如何拥有一个包含C并将(a,B)定义为唯一的覆盖索引 我考虑使用两个索引:一个是唯一的,一个是覆盖,并使用INDEXED BY强制选择覆盖索引 这合理吗?是的,这是合理的 但是,在此之前,我建议您尝试在a和B上放置主键,然后再次尝试查询。查看是否有性能提升。如果没有收益,您当然可以尝试在t1(a,b)上创建唯一索

假设我有一个包含三列a、B、C的表t1,其中(a、B)包含一个唯一的键(有数十万行)。由于90%的查询将采用从t1中选择C的形式,其中A=?B=?,我想我想要一个a,B和C的覆盖指数

我如何拥有一个包含C并将(a,B)定义为唯一的覆盖索引

我考虑使用两个索引:一个是唯一的,一个是覆盖,并使用INDEXED BY强制选择覆盖索引


这合理吗?是的,这是合理的


但是,在此之前,我建议您尝试在a和B上放置主键,然后再次尝试查询。查看是否有性能提升。如果没有收益,您当然可以尝试在t1(a,b)上创建唯一索引idx\u t1\u ab来强制唯一性。然后在A、B和C上创建索引。

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

CREATE TABLE t1 (
    A,
    B,
    C,
    PRIMARY KEY (A, B)
) WITHOUT ROWID;