SQLite:索引深度

时间:2018-09-13 02:41:45

标签: python sql database sqlite

我对索引有一个疑问。如下所示,第一个索引只有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);

谢谢你==

2 个答案:

答案 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=?)

请参阅https://www.sqlite.org/eqp.html