我对数据库不太熟悉,现在我正在尝试理解索引机制。
据我所知,在RDBMS中,对列进行索引可以加快按该列进行搜索的速度。对于三重存储,这也是正确的,只有在那里索引假设您将搜索(例如)主要通过主题,然后按对象,等等。
我不确定RDBMS,但是在三重存储上,您可以定义多个索引,让存储库为每个查询选择最佳索引(希望我理解正确)。自然,出现以下问题:
为什么我不应该将所有可能的索引添加到三重存储中,并扩展到RDBMS,为什么不在每一列上创建索引(假设我不太懒)?
发布于 2012-02-09 14:18:29
因为,从本质上说,索引是一个额外的表,其中主键是要索引的字段,而唯一的内容是主表的主键。因此,每个更新都必须在使用您更新的字段的每个索引中复制。
这一点在插入时尤为明显。想象一下,如果您对一个表所做的每一次插入都必须在其他20个表上复制。会很慢的。
请注意,对于复合索引、集群索引和全文索引,情况会变得更糟,但我不想让问题复杂化。
发布于 2012-02-09 14:18:04
索引基本上是必须构建和存储的附加数据结构。构建inde浪费了CPU的能量(在编写操作期间),并且存储它浪费了磁盘容量。
为什么要构建和存储您从未使用过的索引?
发布于 2012-02-09 14:24:09
为表中的每一列创建索引通常是浪费空间,正如其他人所提到的,它可以减慢插入/更新操作的速度。索引用于加速查询。只有在查询列中的值时注意到性能差时,我才建议将索引添加到列中。
某些数据库可能需要表的主键的索引,因此您可能没有选择。此外,如果您有一个非常大的文本列,有一些特定的技术是为全文搜索和索引而设计的,但它们并不总是与用于小型数字列的索引类型相同。
https://softwareengineering.stackexchange.com/questions/134184
复制相似问题