表上的更多索引会影响性能吗?

sat*_*ish 2 performance index-tuning query-performance

可能的重复:
索引如何影响查询性能?
如何知道何时/是否有太多索引?

  • 在语句中使用一些“where”条件说“X”报告,因此我们在表“T”上创建索引“A”。
  • 在语句中使用一些“where”条件说“Y”报告,因此我们在表“T”上创建索引“B”..
  • 在语句中使用一些“where”条件说“Z”报告,因此我们在表“T”上创建索引“C”。
  • 在语句中使用一些“where”条件说“M”报告,因此我们在表“T”上创建索引“D”。

现在有 4 个索引,这个表有大量的记录。

  1. 当我在这个表中插入或更新行时,索引会影响这些操作的性能吗?
  2. 如果是这样,那么我如何调整这些查询以使其性能良好?

Mat*_*t M 8

INSERT 将触及聚集索引或堆,以及每个非聚集索引。UPDATE 将触及聚集索引或堆,以及每个在键或叶级别包含要更新的列的非聚集索引。DELETE 将触及聚集索引或堆,以及每个非聚集索引。这些语句的一个例外是从索引中过滤掉记录。

一般的经验法则是,表上的索引越多,INSERT、UPDATE 和 DELETE 操作就越慢。这就是为什么为性能添加索引是一种权衡,必须适当平衡。

希望这可以帮助,

马特

  • “...将触及聚集索引或堆,以及每个非聚集索引。” 不必要。过滤索引不会总是受到影响。 (4认同)