【发布时间】:2016-01-25 20:58:46
【问题描述】:
当我在 sqlite 中创建索引时,它会优化对该键的查询。但有时我想查找排除该键的某些值的记录,而我的索引似乎根本没有用于优化这些值。我不知道如何编写索引来优化不匹配键的查询。
这是我所说的一个例子:
CREATE TABLE place (
id INTEGER PRIMARY KEY,
thing INTEGER NOT NULL,
thekey INTEGER NOT NULL,
unique(thing,thekey));
CREATE INDEX bythekeys ON place(thekey);
EXPLAIN QUERY PLAN SELECT thing FROM place WHERE NOT thekey = ?;
-- => 0 0 0 SCAN TABLE place
EXPLAIN QUERY PLAN SELECT thing FROM place WHERE thekey = ?;
-- => 0 0 0 SEARCH TABLE place USING INDEX bythekeys (thekey=?)
CREATE INDEX bythenotkeys ON ........?
“bythekeys”索引优化通过该键查找记录的查询,除非该查询使用该查找的逻辑否定。无论是使用 NOT 还是 != 似乎都没有什么区别。它总是只扫描整个表而不使用任何索引。我是否会制作……部分索引或其他内容?如何优化 NOT 查询?
【问题讨论】:
标签: sqlite optimization indexing boolean