由于索引会加快搜索速度,为什么DBMS不会自动为表的每一列创建索引?

时间:2014-03-03 19:51:40

标签: database indexing

我最近开始阅读有关面试的数据库并且遇到了这个问题。任何人都可以帮我这个吗?

2 个答案:

答案 0 :(得分:2)

基本上因为拥有太多的SQL索引会使UPDATE和INSERT更慢并且还会占用磁盘空间。因此,在列中使用不打算用于过滤器或订单的索引是一个坏主意。

有时你需要一个复杂的索引(由两列或更多列组成),因此RDBMS为每个可能的列组合创建一个索引是荒谬的。

答案 1 :(得分:0)

Ditto Rafa。让我补充一下:

拥有索引可以更快地找到所需的记录。但它使插入和删除记录更慢,并且它使用更多的磁盘空间和其他资源。

所以这是一个权衡。如果您很少或从不使用某个字段来查找记录,那么为它创建和维护索引是没有意义的。就像假设你有一个带有客户名称的数据库。索引姓氏可能有意义。您可能按姓氏进行了大量搜索。但是如果你有一个Junior / Senior / Esq / etc的字段,那么对它进行索引可能就没那么重要了。你多久会说,“我们不知道他的账号,我们不知道他的名字,我们不知道他的地址,但我们确实知道他是'少年'”。

如果经常读取数据库但很少更新,则可以继续在关闭的情况下创建索引。如果数据库主要是编写的并且很少被读取 - 就像事务存档一样 - 那么这将是减少索引的原因。