为什么要有少量具有多列的索引

时间:2010-11-17 02:58:42

标签: indexing

据说,从数据加载的角度来看,拥有多列的索引少于多列索引,每列索引数较少? 请告诉我原因。

3 个答案:

答案 0 :(得分:2)

通常,每个索引都会增加DML操作的开销。因此,添加到表中的索引越多,为了使每个索引保持最新,需要完成的工作就越多。例如,当您向表中插入新行时,可能需要更新每个索引以反映新值。对于在给定表上发生大量操作的系统中,这尤其是一个问题。

索引覆盖多列的一个优点是,如果您只选择索引中保存的数据,则可以执行索引扫描与表扫描,这可以减少检索数据所需的磁盘读取次数等(覆盖索引) )。

如果表是针对事务操作(插入/更新/删除)等,那么您将需要仔细考虑每个索引。如果要向静态表/报告表添加索引,则维护每个索引的开销不是问题。

答案 1 :(得分:1)

原因是每个索引都需要由db引擎维护单独的数据结构。所以你有很多小索引,你有很多这样的结构。如果你有一个有很多列,你有一个结构。

但实际上有更好的理由使用一个大型索引而不是许多小型索引: 1)减少同步工作量!只有一个指数 2)你可以有一个聚集索引(当然不是太大),这是==速度。通常,您无法定义多个群集索引。

换句话说:它对db引擎的压力较小,因为它可以用更少的数据结构来处理。如果你有这么多索引,那么你可能做错了什么 - 这里的设计问题。并不是说有必要设计问题,但95%的情况我见过很多索引=设计错误。因此,您使用较少的索引(最好只有一个群集)和更多的列:)插入/更新可能会更慢,但您必须根据您的具体情况做出决定:更频繁地选择或保留数据?如果选择按照我的建议,如果没有多少小索引可能更有意义(或不是:)

答案 2 :(得分:0)

更多索引意味着数据加载过程必须为正在插入或更新的每一行创建/更新更多索引,这样会降低进程的速度。