1

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

4

2 回答 2

2

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

DELETEs由于删除索引条目而变慢。UPDATEs 可能会变慢——这取决于索引列是否更改。

SELECTs, UPDATEs, 和DELETEs, 但不是INSERTs, 需要查找行;为此,索引可能会有很大帮助。

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

辅助键(在 InnoDB 中),除了键之外,通过所谓的“更改缓冲区”以“延迟”的方式UNIQUE更新(通常是由于INSERTDELETE,但可能是由于)。UPDATE这有效地推迟了更新索引,但仍然保持索引完全可用。

这些都不受索引中列的顺序的影响。但是,如果索引大于 RAM 中的缓存,“缓存”就会发挥作用,并且可能会或可能不会涉及 I/O。但这是另一个话题。

一般来说,读取索引的好处远远超过写入操作的减速。

于 2016-07-10T06:14:14.577 回答
0

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

从插入速度的角度来看,索引中字段的顺序无关紧要,重要的是索引的数量。

于 2016-07-08T13:41:41.637 回答