ORACLE在索引表上插入性能

时间:2010-08-05 11:29:20

标签: database oracle insert indexing

为什么Insert语句在索引表上执行速度较慢?

4 个答案:

答案 0 :(得分:14)

这实际上是同样的问题:

  

为什么我需要更多时间将所有杂货放在厨房的正确位置   在我去杂货店之后把所有东西都留在袋子里了?

这是因为在存放您的杂货时,您希望它们位于一个漂亮的,众所周知的位置,以便以后更容易找到它们。

数据库也必须这样做。

  • 如果你有一个没有索引的表,它只能在表的末尾添加新数据。
  • 如果您有索引,则数据库必须执行更多工作。它可能仍会将记录放在表的末尾,但另外它会更新其索引以确保如果你想在之后找到该记录,它会比没有索引更快找到它。

这也意味着添加更多索引会进一步减慢插入速度。

应该很清楚,如果您之后也将使用它,您只想创建一个索引。如果您只创建索引并且之后没有使用它来提高查询的性能,则不需要索引,因为它只会减慢插入速度,而不会改进任何查询。

答案 1 :(得分:9)

INSERT语句必须将数据添加到表数据块并更新表已定义的任何索引。

显然,如果你有一个索引,那么插入内容还需要做更多的“工作”来更新索引。

答案 2 :(得分:1)

索引允许您存储有关数据的更多信息(在索引块中),这有助于更轻松地检索数据。显然,您最初正在做额外的工作以便以后受益(选择)。

答案 3 :(得分:0)

如果您需要在稍后阶段从您插入的表中删除某些数据,那么在表上建立索引并不是一个好主意。将数据插入表中所需的额外时间可以通过在索引表上运行得更快的删除来补偿(如果在删除WHERE子句中使用了索引列。????