我有一个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
索引是覆盖索引。任何人都可以理解并解释它吗?
答案 0 :(得分:1)
covering index是一个索引,涵盖了搜索中实际使用的所有列。
UPDATE总是读/写整个表行(和相应的索引条目),但是为了找到要更新的行,不需要读取任何表行的内容。