我可以创建一个UNIQUE WHERE索引吗?

时间:2014-04-26 20:06:53

标签: sqlite indexing unique

如果(a, b),则已知两个整数列b = 1的组合是唯一的。唯一可以假设的其他值是0。

我想用UNIQUE约束来表达这个,类似于

CREATE TABLE t (
    id INTEGER PRIMARY KEY,
    a INTEGER NOT NULL,
    b INTEGER NOT NULL,
    CONSTRAINT u UNIQUE (a,b) WHERE b=0
)

但是,根据语法图表,SQLite似乎没有允许我指定WHERE部分的功能。还有其他方法可以使用吗?

b = 1条件在数据中很少见,但在查询中非常常用,所以我肯定希望使用它来添加索引。

1 个答案:

答案 0 :(得分:0)

我做了更多研究,但一无所获。

我能想到的最好方法是:

  • 为b = 1
  • 创建索引
  • 添加CHECK NOT EXISTS约束而不是UNIQUE

约束可以使用索引,至少应该阻止全表扫描(需要由EXPLAIN QUERY PLAN验证)。