InnoDB综合索引顺序和INSERT性能

时间:2016-07-08 13:34:50

标签: mysql indexing innodb composite-index

我有一个包含3列的MySQL表,我希望使用多列索引。 A列是TINYINT,B是SMALLINT,C是VARBINARY(16)。我应该将索引用作A,B,C,因为A的粒度低于B而B低于C以实现最大INSERT速度?

2 个答案:

答案 0 :(得分:2)

(注意:这个答案澄清或不同意已经写过的一些评论。)

由于删除索引条目,

DELETEs速度变慢。 UPDATEs 可能放慢速度 - 这取决于索引列是否已更改。

SELECTsUPDATEsDELETEs,但不是INSERTs,需要找到行;为此,索引可能会有很大帮助。

如果要检查INSERT索引,UNIQUE会受到额外的伤害。

辅助密钥(在InnoDB中),{em>除了{/ 1}}密钥的更新(通常由于UNIQUEINSERT,但可能是由于{{ 1}})在'延迟'通过所谓的"更改缓冲区"。这有效地推迟了索引的更新,但仍然使索引完全可用。

这些都不受索引中列的顺序的影响。但是,如果索引大于可以缓存在RAM中的索引,那么"缓存"发挥作用,I / O可能会或可能不会参与。但这是另一个话题。

通常,读取的索引中的好处远远超过写入操作的减速。

答案 1 :(得分:0)

索引实际上数据修改查询(插入,更新,删除),因为rdbms不仅要更改表本身,还要更改索引。

从插入速度的角度来看,索引中字段的顺序是不相关的,它是重要的索引数。