我有一个包含3列的MySQL表,我希望使用多列索引。 A列是TINYINT,B是SMALLINT,C是VARBINARY(16)。我应该将索引用作A,B,C,因为A的粒度低于B而B低于C以实现最大INSERT速度?
答案 0 :(得分:2)
(注意:这个答案澄清或不同意已经写过的一些评论。)
由于删除索引条目, DELETEs
速度变慢。 UPDATEs
可能放慢速度 - 这取决于索引列是否已更改。
SELECTs
,UPDATEs
和DELETEs
,但不是INSERTs
,需要找到行;为此,索引可能会有很大帮助。
如果要检查INSERT
索引,UNIQUE
会受到额外的伤害。
辅助密钥(在InnoDB中),{em>除了{/ 1}}密钥的更新(通常由于UNIQUE
和INSERT
,但可能是由于{{ 1}})在'延迟'通过所谓的"更改缓冲区"。这有效地推迟了索引的更新,但仍然使索引完全可用。
这些都不受索引中列的顺序的影响。但是,如果索引大于可以缓存在RAM中的索引,那么"缓存"发挥作用,I / O可能会或可能不会参与。但这是另一个话题。
通常,读取的索引中的好处远远超过写入操作的减速。
答案 1 :(得分:0)
索引实际上慢数据修改查询(插入,更新,删除),因为rdbms不仅要更改表本身,还要更改索引。
从插入速度的角度来看,索引中字段的顺序是不相关的,它是重要的索引数。