我有一个包含3列的MySQL表,我想在其上使用多列索引。列A是TINYINT,B是SMALLINT,C是VARBINARY (16)。我应该使用索引A,B,C,因为A的粒度比B小,B比C小,以达到最大的插入速度?
发布于 2016-07-10 14:14:15
(注:此答案澄清了或不同意已经写好的一些评论。)
DELETEs会因为删除索引项而变慢。UPDATEs可能会变慢--这取决于索引列是否被更改。
SELECTs、UPDATEs和DELETEs,而不是INSERTs,需要查找行;为此,索引可能会有很大帮助。
如果存在要检查的UNIQUE索引,则INSERT会受到额外的伤害。
次键(在InnoDB中),除了UNIQUE键之外,通过所谓的“更改缓冲区”以“延迟”的方式进行更新(通常是由于INSERT和DELETE,但也可能是由于UPDATE)。这有效地推迟了索引的更新,但仍然保持索引完全可用。
所有这些都不受索引中列的顺序的影响。但是,如果索引大于RAM中可以缓存的大小,“缓存”就会起作用,可能涉及也可能不涉及I/O。但这是另一个话题。
一般而言,读索引带来的好处远远超过写操作的减慢。
发布于 2016-07-08 21:41:42
索引实际上会降低数据修改查询(insert,update,delete)的速度,因为关系型数据库管理系统不仅要更改表本身,还要更改索引。
从插入速度的角度来看,索引中字段的顺序并不重要,重要的是索引的数量。
https://stackoverflow.com/questions/38268050
复制相似问题