索引会使数据库更新变慢吗?

fai*_*gat 5 sql database-indexes

人们通常说,当您创建索引时,它会使您的提取速度更快,但同时它们会减慢您的更新(删除、插入、更新)速度,因为每次更新索引都将被重新创建。

我有一个问题:如果数据库在更新操作后更新其索引并从查询返回,那么这如何减慢查询执行速度?

由于查询在更新索引后的正常时间返回。我们可能会说,索引可能会导致数据库内部维护工作增加,但不应增加更新查询时间。

Pow*_*tat 4

数据库索引使数据库更新同时变得更慢和更快。这取决于更新语句:

  • 当您对所有行进行更新update mytable set mycolumn = 4711时,索引创建会减慢更新速度,因为这是一些需要时间的额外工作。

  • 当你有一个带有像这样的where条件的更新语句update mytable set mycolumn = 4711 where mycolumn = 123时,现有索引会加速更新,因为数据库不必进行全表扫描,而是可以使用mycolumn上的现有索引。

  • 所以从上面你可以说插入总是会慢一点

  • 另外,从上面你可以看出,带有 where 子句的删除也会更快。

  • 最后但并非最不重要的一点是选择会快得多!

索引的要点在于它们是一种妥协 - 您应该从发送到数据库的所有语句的平均视图来看待它们 - 当索引选择得很好时,它们将大大加快数据库访问速度。如果没有索引,大多数事情(选择、更新、删除)都会慢得多。因此,您确实不必担心索引可能会给插入带来的小幅减慢。

如果您在更新时遇到性能问题,您应该首先检查更新的 where 子句是否会执行全表扫描,从而减慢更新速度!