无法理解UPDATE查询的{COVERING INDEX查询计划

时间:2016-11-07 14:49:47

标签: sqlite android-sqlite

我有一个SQLite表如下:

CREATE TABLE TableA (ColumnA INTEGER PRIMARY KEY AUTOINCREMENT,
                     ColumnB INTEGER NOT NULL,
                     ColumnC TEXT NOT NULL)

我已在此表上创建了两个索引,如下所示:

CREATE INDEX ColumnB_ColumnC_on_TableA ON TableA (ColumnB ASC, ColumnC ASC)
CREATE INDEX ColumnC_on_TableA ON TableA (ColumnC ASC)

当我在以下查询中运行EXPLAIN QUERY命令时......

UPDATE TableA SET ColumnB = 1 WHERE ColumnC = '1'

...我看到输出如下......

SEARCH TABLE TableA USING COVERING INDEX ColumnC_on_TableA (ColumnC=?)

我无法理解为什么查询计划表明当索引未覆盖表中的所有列时ColumnC_on_TableA索引是覆盖索引。任何人都可以理解并解释它吗?

1 个答案:

答案 0 :(得分:1)

covering index是一个索引,涵盖了搜索中实际使用的所有列

UPDATE总是读/写整个表行(和相应的索引条目),但是为了找到要更新的行,不需要读取任何表行的内容。