我对索引有一个疑问。如下所示,第一个索引只有2列,第二个只有3列。我的问题是,第二个索引是否已覆盖第一个索引,因为开始处有相同的列?有什么想法吗?
CREATE INDEX ix_repl_lexem_scope_2_nr_3 ON replications (contextL1,normalized_word);
和
CREATE INDEX ix_repl_lexem_scope_2_nr_3 ON replications (contextL1,normalized_word,contextR1);
谢谢你==
答案 0 :(得分:2)
如果有第二个索引,则不需要第一个索引。
重要的是,列必须相同且顺序相同。第一个索引中的列与第二个索引中的初始列相同,因此不需要第一列。
此外,这并不是真正可取的。数据更改时,每个索引都会产生开销(空间和时间)。因此,您应该坚持使用第二个索引。
答案 1 :(得分:1)
是的。
而且,您可以使用EXPLAIN QUERY PLAN
命令来检查索引的使用情况。
sqlite> CREATE INDEX i2 ON t1(a, b);
sqlite> EXPLAIN QUERY PLAN SELECT a, b FROM t1 WHERE a=1;
QUERY PLAN
`--SEARCH TABLE t1 USING COVERING INDEX i2 (a=?)