向表中添加多个索引是否有缺点?

时间:2010-02-03 18:25:59

标签: sql database indexing

我正在创建一个新的数据库,并且想知道在我认为可能需要的表格中添加大量索引是否有任何缺点。

如果我创建索引但最终没有使用它会导致任何问题吗?

12 个答案:

答案 0 :(得分:27)

索引使搜索表更快,但写入时间更长。使用未使用的索引会导致一些不必要的减速。

答案 1 :(得分:16)

每个指数:

  • 在磁盘和内存中占据一席之地
  • 每次插入/更新/删除行时都需要一些时间来更新

这意味着您应该只定义对您的应用程序需求有用的索引:索引太多会使写入速度慢于读取速度。

答案 2 :(得分:5)

是。 您应该只添加那些必要的索引。

索引需要额外的空间,并且在插入/更新/删除记录时,DBMS也需要更新这些索引。因此,这意味着更新/添加/删除记录需要更多时间,因为DBMS必须进行一些额外的管理。

  

向表中添加多个索引   我想可能需要一个。

您应该只添加那些您确定它们是必要的索引。 要确定可以放置索引的列,您可以:

  • 将索引添加到列 外键
  • 将索引添加到where子句中经常使用的列
  • 将索引添加到按子句顺序使用的列。

另一种 - 也许更好的方法 - 是使用SQL事件探查器:

  • 使用SQL事件探查器跟踪您的 应用程序/数据库一段时间
  • 保存跟踪结果
  • 在索引优化向导中使用跟踪结果,该向导将告诉您应创建哪些索引,每个索引中应包含哪些列,并且还将告诉您索引的这些列的顺序。

答案 3 :(得分:4)

索引会导致数据库大小增加以及插入/更新/删除记录的时间。除非您知道将使用它们,否则尽量不要添加它们。

答案 4 :(得分:1)

拥有索引意味着INSERT和UPDATE需要更长的时间。如果你有太多的索引,那么更快的搜索时间的好处可能变得不值得额外的INSERT和UPDATE时间。

答案 5 :(得分:1)

是;具有索引使选择更快但可能使插入更慢,因为必须为每个插入更新索引。如果您的应用程序执行了大量编写而没有太多阅读(例如审计日志),则应避免额外编制索引。

答案 6 :(得分:1)

  • 更新并插入更多费用,因为索引也需要更新
  • 使用的空间更多

答案 7 :(得分:1)

不要在开头创建任何额外的指数。等到你至少部分开发了系统,这样你就可以了解表的用法。生成查询计划以查看查询内容(以及如何和性能成本),然后根据需要添加新索引。

答案 8 :(得分:1)

不要盲目索引!查看您的数据,以查看SELECT谓词中实际使用哪些列并将其编入索引。

还要考虑索引占用空间。有时会有很多空间。我看过数据库中的索引数据远远超过了纯粹的原始数据。

答案 9 :(得分:1)

额外的空间,像每个人所说的那样插入额外的时间。

此外,您应该确定索引和设计,因为如果查询优化器选择了错误的索引,有时索引实际上会降低查询速度。这种情况并不常见,但如果通过优化特定连接的索引并导致另一个连接实际变慢,则可能会发生这种情况。我不知道SQL Server,但你会发现许多技巧,暗示mySQL优化器以特定的方式构建查询来解决这个问题。

DBA得到了大量的资金,可以通过索引(以及其他方面)来了解奇怪的问题,所以是的,添加大量索引有不利因素,所以要小心。在您的查询分析器上大量使用,而不是盲目地抛出索引。

答案 10 :(得分:1)

查看where子句中使用的列,查看连接中使用的列(如果有)。 一般来说,这是最简单的经验法则。 如前所述的无关索引会降低DML语句的速度,通常不建议这样做。理想情况下,我所做的是完成整个模块,在单元测试阶段,确保您可以对模块进行负载分析,然后检查是否看到减速,并在分析减速的位置后,添加索引。

答案 11 :(得分:1)

我认为它已经得到了回答,但基本上索引会减慢插入/更新,因为插入新记录(或更新现有记录)时索引会更新。

空间也是一个考虑因素,包括内存和磁盘。

因此,对于发生大量事务的数据库,这肯定会产生明显的性能影响(这就是性能调优包括添加和删除索引以优化针对数据库执行的某些活动的原因)。

祝你好运