我有一个看起来像这样的SQLite数据库:
template <class T>
class my2darray {
std::vector<T> values;
size_t m, n;
public:
my2darray(size_t m, size_t n) : values(m*n), m(m), n(n) {}
T& operator()(size_t i, size_t j) {
return values[i*n+j];
}
};
部分索引是专门为这样的查询创建的:
CREATE TABLE image
(
capture_time,
capture_number,
part_located,
other_data,
some_more_data,
PRIMARY KEY (capture_time, capture_number)
) WITHOUT ROWID;
CREATE INDEX image_ix_no_part
ON image (capture_time, capture_number)
WHERE NOT part_located;
不幸的是,SELECT capture_time, capture_number FROM image
WHERE NOT part_located
ORDER BY capture_time, capture_number;
没有提及覆盖索引的任何内容,即使这个部分索引包含所有必要的信息。这不应该起作用吗?
答案 0 :(得分:1)
这是我最终使用的解决方法:
CREATE INDEX image_ix_no_part
ON image (
capture_time, capture_number,
part_located -- Needed for a covering index search.
)
WHERE NOT part_located;
它不必要地在每个索引条目的末尾添加一个零,但它只需要一个字节,因此它是可接受的损失。