【发布时间】:2014-03-20 23:42:47
【问题描述】:
通常说,当您创建索引时,它会使您的获取速度更快,但同时它们会减慢您的更新(删除、插入、更新),因为每次更新索引都需要重新创建。
我有一个问题:如果数据库在更新操作后更新其索引并从查询返回,那么这会如何减慢查询执行速度?
在更新索引后,查询会在正常时间返回。我们可以说索引可能会增加数据库内部维护工作,但不应该增加更新查询时间。
【问题讨论】:
-
索引的维护和数据本身的更新是在同一个事务中完成的,因此调用者一直等到 both 完成(并且索引更新 必须 是事务性的,否则不同的会话可能会从索引查找中得到错误的答案)。但如果索引有
where子句,也可以加速更新或删除。 -
@a_horse_with_no_name 别害羞,把这个评论作为答案。
-
@a_horse_with_no_name 如果索引有 where 子句,您能解释一下如何加快更新或删除速度吗?
-
如果您指定
where子句,DBMS 需要找到由该条件选择的行。如果该搜索可以使用索引完成,它会快得多。考虑update foo set bar = 24 where id = 42,如果id列上没有索引,DBMS 需要扫描整个表以找到应该更新的行。
标签: sql database-indexes