修改数据

Insert

表中索引的个数是影响insert性能的最关键因素。索引越多,执行速度越慢。insert语句没有where子句,因此也不能直接受益于索引。

往表中插入新的一行记录涉及几个步骤:

  • 首先,数据库必须找到一个地方来存储数据行。对于堆表而言,数据库可以把数据存储在任意有足够空间的块。这是一个非常简单和快速的过程。之后数据库所要做的就是将新数据添加到相应的数据块中。
  • 如果表建有索引,数据库必须保证新数据被添加到该表的每一个索引中。因此,索引的数量与insert语句的成本呈正比关系。

在索引中新增条目比堆结构要慢得多,因为需要维护索引的顺序和索引树的平衡。索引的维护是insert成本中最昂贵的。

优化insert的性能的方法:

  • 尽可能少建索引
  • insert时临时删除索引,插入完成后再重建(常用于数据仓库)

Delete

insert不同,deletewhere子句直接受益于索引。

理论上,delete在一张没有索引的表中执行性能应该是最好的(就像insert那样)。然而,如果没有索引,数据库必须读取全表来找到需要删除的行。这意味着删除操作虽然很快,但是查询会非常慢。

类似select,如果需要删除大部分数据,应该选择不使用索引。

Update

update语句必须重新调整索引条目的位置。数据库需要删除旧条目,在另一个位置添加新条目。

update语句的性能也取决于表中索引的数量。与insertdelete不同的是,update不一定会涉及到所有字段,因此只会影响到包含被更新字段的索引。

作者

Jesse

发布于

2021-07-19

更新于

2021-07-19

许可协议

评论