用于优化NOT查询的sqlite索引
当我在sqlite中创建索引时,它会优化对该键的查询。但有时我想查找排除该键某些值的记录,而我的索引似乎根本不用于优化这些值。我不知道如何写一个索引来优化一个不匹配键的查询 这是我所说的一个例子:用于优化NOT查询的sqlite索引,sqlite,optimization,indexing,boolean,Sqlite,Optimization,Indexing,Boolean,当我在sqlite中创建索引时,它会优化对该键的查询。但有时我想查找排除该键某些值的记录,而我的索引似乎根本不用于优化这些值。我不知道如何写一个索引来优化一个不匹配键的查询 这是我所说的一个例子: CREATE TABLE place ( id INTEGER PRIMARY KEY, thing INTEGER NOT NULL, thekey INTEGER NOT NULL, unique(thing,thekey)); CREATE INDEX bythekeys O
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查询?数据库假定一列包含许多不同的值。 所以使用
=代码>过滤器估计不会减少足够多的结果,从而使额外的索引查找变得有价值
如果实际值很少,请重写查询,使其使用相等(=
)或范围(
)。谢谢。该列包含许多不同的值,但每个值都有许多重复的值。例如,删除42条记录可能会删除所有记录的10%。我确实尝试过使用键<?1或键>?1,但确实,额外的索引查找似乎不值得。