索引是完全重建还是索引已更新?如果它已更新,那么究竟更新了什么?
假设正在使用InnoDB。
答案 0 :(得分:1)
MySQL中表的所有索引都是"立即" 已更新(未重建),该行为INSERTed
到该表中。同上DELETE
。在某些情况下,UPDATE
会导致索引更新。
"立即",我的意思是你无法判断它是否在控制权返回之前完成,或者是否存在某种形式的缓存。
MySQL中的大多数索引都是BTrees。在少数情况下,有FULLTEXT,SPATIAL或HASH。
向BTree添加条目涉及向下钻取"树" (百万行表约3个级别)并添加一个'记录'在叶节点中。这很快,你无法判断它是否已经完成。
如果你有十几个索引,那么有十几个BTree(或其他)需要更新。这表明你不应该拥有超过你需要的索引。
在 InnoDB 中,PRIMARY KEY
是"群集"。也就是说,数据和PRIMARY KEY
共同存在于一个BTree中,由PRIMARY KEY
排序并包含所有数据。
在InnoDB中,每个'记录'在辅助索引(也构造为BTree)中包含PRIMARY KEY
的副本。 (这可能是扎法所暗示的。)
BTree索引非常有效
WHERE key BETWEEN 22 AND 44
)答案 1 :(得分:0)
简而言之,你可以说在innodb中,每个索引都与clustured index(通常称为主键)相关联,因此每当更新任何索引值时,它(更改的值)将再次与聚集索引相关联。