Answers:
索引基本上是必须构建和存储的其他数据结构。构建inde会浪费CPU能力(在写操作期间),而存储ined则会浪费磁盘容量。
您为什么要构建和存储从未使用过的索引?
仅在需要时放置索引。根据经验,在开发数据库架构时,每个表都会从PK主键聚簇索引开始。这将是该表中数据的唯一标识符。可以在1列或多列上。
之后,我通常只在要强制执行唯一性的列上添加非群集唯一索引。
这是基本架构。随着应用程序的发展和成熟,我们会根据性能问题和查询数据的方式根据需要添加索引。
添加的每个索引都会增加使用的空间,并增加其他维护。因此,明智地选择索引。
索引的优势在于:1)一种可以快速搜索的数据结构,以及2)比实际表更紧凑的结构,从而使更多的索引适合内存而不是分页到磁盘。
如果在每列上都有一个索引,则索引本身将比它们所代表的表占用更多的空间。如果数据库确实确实使用了所有索引,则将需要更多时间才能将它们换入和换出内存。此外,每个索引都必须以惰性,更新或删除的方式进行更新。
除此之外,单列上的索引甚至都不是您可以做的最好的事情。实际上,大多数关系数据库都允许在多个列上建立索引,并且这些列的顺序很重要。例如,如果我想搜索数据库查找1980年至1984年之间去过杜克大学的所有人员,那么我想要的是(School,ClassYear)上的索引。该查询将无法使用具有相同列的索引,但将其取反。
因此,要创建每个可能的索引,至少要有n个!在索引中排列列的方式。仅5列,就有120个可能的索引。
由于存在许多可能的索引,因此您确实必须确定哪些索引对您的应用程序有用,并仅创建那些索引。
为表中的每一列创建索引通常会浪费空间,并且正如其他人所提到的那样,它可能会减慢插入/更新操作的速度。索引用于加速查询。如果您在查询该列中的值时发现性能不佳,则只建议向该列添加索引。
某些数据库可能需要为表的主键创建索引,因此您可能无法选择该索引。同样,如果您的文本列很大,则有一些专为全文本搜索和索引而设计的技术,但是它们并不总是与小的数字列使用的索引类型相同。